4

ユーザーがカスタム テキスト領域にテキストを入力するアプリがあります。ユーザーがテキスト領域をタップすると、タップした場所にカーソルが移動するため、テキスト領域内の任意の場所にテキストを挿入/削除できます。テキスト領域の先頭にスペースを入れることはできず、テキスト領域内の任意の場所に連続してスペースを入れることはできません (また、新しい行を作成するためのリターン キーもありません)。テキスト領域のテキストは、"text" と呼ばれる属性付きの文字列に格納されます。

私が開発する必要があるのは、テキスト領域で最も幅の広い単語を追跡する効率的なアルゴリズムです。私が最も広いと言うとき、私は文字幅を指しているのではなく、テキストを に格納しCTFrameRefてそのサイズを取得することによって計算している実際のピクセル幅を指しています。

これを達成するための多くのブルートフォースの方法を思いつきましたが、これを達成するための時間と空間の両方にとって最も効率的な方法を誰かが知っているかどうか疑問に思っています? 明らかに、各単語とその長さを追跡する何らかのデータ構造が必要です。すべての単語を配列に格納し、テキストが挿入または削除されるたびにそれらを更新することを考えましたが、他に何か考えられるかどうか疑問に思っています。最適な?

4

1 に答える 1

1

操作を含むものを見つける(または書き込む)ことができれば、 min-heapでこれを行うことができますmodify-keyincrease-keyandの両方が必要になりますdecrease-keyが、良いニュースは、両方とも O(log N) で実装できることです。

于 2012-10-09T16:30:46.347 に答える