1

私は面接の準備をしていますが、よくある質問の 1 つに次のようなものがあります。

単語と単語の最初の文字のインデックスに分解された文 (例: The song is the best song) が表示されます。つまり、"the" - 0, 12; 「歌」 - 4,21; 「は」 - 9; 「最高」 - 16; この情報を格納するデータ構造を選択し、そのデータ構造を使用して文を再構築します。

私の最初の試みは、キーが単語で、値が位置の配列であるハッシュマップに単語を格納することです。これは完全に実行可能ですが、ネストされた for ループと境界インデックスでの厄介な問題、適切な場所のスペースの読み取りなどで非常に複雑になります。

私はそれ用のコードを作成したので、誰かが見たい場合は投稿します(長くてリベットで読むことができます!!)

とにかく、私の質問に: 誰かがデータを表現して再構築するより効率的な方法を提案できますか? 別の方法を試してみたいのですが、これが今のところ私が思いついたすべてです

4

3 に答える 3

1

さまざまなスキル レベルの候補者を面接する者として、最終的なデータ構造を決定する前に、面接対象者にもっと質問してもらいたいと思います。

  • データは文を再構成するためだけに使用されますか? もしそうなら、リストが望ましいでしょう。
  • 単語の位置を調べる必要がありますか? もしそうなら、あなたの構造は問題ありません。
  • このデータを使用した文について、他にどのような質問をすることができますか?

1 つのオプションはWordPosition、単語、その位置、および次の単語への参照を含む個々の単語ごとにオブジェクトを作成することです。これらはリンクされたリストを形成し、文の再構築を些細な順序通りのトラバーサルにします。キーとしての単語とWordPosition各単語の のリストを使用して、これらをマップに保存します。

于 2012-04-10T01:15:32.600 に答える
0

単純すぎるように見えるので、ここではマップの使用を避けています。

class Sentence {
  String[] words;//Every word in the sentence
  int[][] word_positions;//{index into the word array,start position of that word in the sentence}

  String getSentence(){
    //Find the last position of the last character of the last word
    int length = word_positions[word_positions.length][1] 
                 + word[word_positions[word_positions.length][0]].length();
    //Allocate an appropriate sized array
    char[] sentence = new char[length];

    //Iterate through every word in the sentence, putting it into the correct place.
    for (int w=0; w<word_positions.length; w++){
      //figure out where in the array this word will start
      int start = word_positions[w][1];
      //get the word
      char[] word = words[wordpositions[w][0].toCharArray();
      //copy it into the master array at the correct position
      for (int letter=0; letter<word.length; letter++ ) {
        sentence[start+letter] = word[letter];
      }
    }

    return sentence.toString();
  }
}

これが質問の一部をカバーしていない場合はコメントしてください。質問されている内容の全範囲を理解しているかどうかはわかりません。

于 2012-04-10T01:25:16.953 に答える
0

キーを位置にするとどうなりますか?その場合、配列を使用する必要はありません。ツリーマップを使用すると、インテグレーターはトークンを順番に返します。

于 2012-04-10T01:10:04.673 に答える