私は最近、以下の問題についてコーディングの質問をされました。私はこの問題に対するいくつかの解決策を持っていますが、それらが最も効率的であるかどうかはよくわかりません。
問題:
テキスト範囲のセットを追跡するプログラムを作成します。始点と終点は文字列になります。
Text range example : [AbA-Ef]
Aa would fall before this range
AB would fall inside this range
etc.
文字列の比較は次のようになります'A'<'a' <'B' <'b' ...'Z' <'z'
この範囲で次の操作をサポートする必要があります
- 範囲の追加-該当する場合、範囲をマージする必要があります
- 範囲の削除-追跡された範囲から範囲を削除し、範囲を再計算します
- クエリ範囲-文字を指定すると、関数は、追跡された範囲の一部であるかどうかを返す必要があります。
追跡される範囲は不連続になる可能性があることに注意してください。
私の解決策:
私は2つのアプローチを思いついた。
- 範囲を二重リンクリストとして保存するか、
- 範囲は、実際のデータを持つリーフノードを持つある種のバランスの取れたツリーとして格納され、リンクリストとして相互接続されます。
このソリューションは十分に優れていると思いますか、それともこれら3つのAPIが最高のパフォーマンスを発揮するようにこれを行うためのより良い方法を考えることができますか?