次のような簡単な問題です:
文字列 word と文字 x のインデックス 0 の配列が与えられます。
文字 x を含む単語を表すインデックスの配列を返します。
返される配列の順序は任意であることに注意してください。
例 1:
入力: 単語 = ["leet","code"]、x = "e"
出力: [0,1]
説明: 「e」は、「leet」と「code」の両方の単語に出現します。したがって、インデックス 0 と 1 を返します。例 2:
入力: 単語 = ["abc","bcd","aaaa","cbc"], x = "a"
出力: [0,2]
説明: 「abc」および「aaaa」には「a」が出現します。したがって、インデックス 0 と 2 を返します。例 3:
入力: 単語 = ["abc","bcd","aaaa","cbc"], x = "z"
出力: []
説明: どの単語にも「z」は出現しません。したがって、空の配列を返します。制約:
1
1
x は英小文字です。
words[i] は英小文字のみで構成されます。
この問題を解決するには、単語リストを反復処理し、各単語で文字が含まれているかどうかを確認し、含まれている場合はそのインデックスを応答リストに保存する必要があります。
class Solution { public List<Integer> findWordsContaining(String[] words, char x) { // create response final List<Integer> indexes = new ArrayList<>(); // iterate words string array for(int i=0;i<words.length;i++){ // check if char exists into the word if(words[i].indexOf(x) != -1){ indexes.add(i); // if yes add index into the response } } // return searched indexes return indexes; } }
実行時間: 1 ミリ秒、Java オンライン送信の 100.00% より高速です。
メモリ使用量: 44.95 MB、Java オンライン送信の 49.76% 未満。
—
ラムダ/関数のアプローチを使用する場合は、通常はクリーンですが、パフォーマンスへの負担が大きくなります。
class Solution { public List<Integer> findWordsContaining(String[] words, char x) { return IntStream.range(0, words.length) .boxed() // convert primitive into Class related (int -> Integer) .map(i -> getIndexIfCharExistsInWord(words[i], i, x)) .filter(Objects::nonNull) // to remove null ones from mapping .collect(Collectors.toList()); } public Integer getIndexIfCharExistsInWord(final String word, final int i, final char x) { return word.indexOf(x) != -1 ? i : null; } }
実行時間: 9 ミリ秒、Java オンライン送信の 2.72% よりも高速です。
メモリ使用量: 44.90 MB、Java オンライン提出の 66.32% 未満。
—
それだけです!他に議論したいことがあれば、お気軽にコメントしてください。何か見逃した場合はお知らせください。適宜更新します。
次の投稿まで! :)
以上がLeetcode — 文字を含む単語の検索の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。