3

次の方法でこれを行うことができることを知っています

  1. StringBuilder
  2. 部分文字列を使用

しかし、圧縮された文字列a5b4c2などを言う方法を探しています。つまりa、5倍bは4倍などであるため、文字列は実際にはaaaaabbbbccそのようなものです。

したがって、インデックス 2 の char は a を返し、インデックス 6 の char は b を返す必要があります。

これに対する最善のアプローチは何ですか?

私の質問は、 String を解凍するための最良の方法は何ですか?

4

2 に答える 2

2

私の質問は、特定のインデックスで文字を見つけるのではなく、この圧縮された文字列の処理に関するものです。

知りたいインデックスが得られるまで文字列を解凍します。または、文字列全体を解凍してキャッシュすることもできます。

これに対する最善のアプローチは何ですか?

より具体的な要件がなければ、考えられる最も単純なアプローチが最善のアプローチであると私は信じています。


文字と数字の各ペアを順番に解析し、その数字だけインデックスを減らし、残りのインデックスが < 0 の場合は、必要な文字を取得します。

于 2013-04-23T10:50:33.490 に答える
0

検索しているインデックスを確認し、文字数の合計を開始します。追加するたびに、インデックスが前の間隔と現在の間隔内にあるかどうかを確認します。もしそうなら、あなたはあなたのキャラクターが何であるかを見つけました. そうでなければ、もう一度追加してください.

たとえば、a5b4c2インデックス 7 の文字が必要な場合、 string が指定されたワークフローは次のようになります。

   current position: 0
   index we are looking for: 7
   add first character's count: 0+5 = 5
   does 7 fall within 0 and 5? no, add again
   current position: 5
   add second character's count: 5+4 = 9
   does 7 fall within 5 and 9? yes, so our character must be 'b'.

charAt()これが文字列を解凍してまたは何かを使用するよりも効率的または高速であるかどうかはわかりませんが、アプローチの方法が異なるだけです。

編集:問題は文字列を解凍する方法に関するものであるため、 aStringBuilderを使用してforループを使用して、正しい文字数を文字列に追加できます...私にとって最も簡単な方法のように聞こえます。

于 2013-04-23T10:54:31.187 に答える