-4

次のような文字列があるとします。

「ラフトゥオポ」

探している単語を知っています。たとえば、次のようになります。

"語"

「RAHDTWUOPO」のような文字列で「WORD」を構成できるかどうかを見つけるための最良の方法は何ですか?

編集:

この質問が不明確だったので、私はもっと詳しく説明したいと思いました。私が達成したかったのは、前もって知っていた単語がランダムな文字列から成り立つかどうかを調べることでした。ループを使用するか、他の方法があるかどうか、これについてどうすればよいかわかりませんでした。

私は頭の中ですぐに何かを思いつきましたが、それは大変な努力が必要であることを知っていましたが、私が達成したいことをより明確にするためにここに記載します.

public class MyLetterObject {
    private String letter;
    private Boolean used;

    public String getText() {
        return letter;
    }

    public void setLetter(String letter) {
        this.letter = letter;
    }

    public Boolean getUsed() {
        return used;
    }

    public void setUsed(Boolean used) {
        this.used = used;
    }
}

boolean ContainsWord(String Word, String RandomLetterString) {
    List<MyLetterObject> MyLetterList = new ArrayList<MyLetterObject>();
    for (char ch : RandomLetterString.toCharArray()) {
        MyLetterObject mlo = new MyLetterObject();
        mlo.setLetter(String.valueOf(ch));
        mlo.setUsed(false);
        MyLetterList.add(mlo);
    }

    String sMatch = "";

    for (char Wordch : Word.toCharArray()) {

        for (MyLetterObject o : MyLetterList) {

            if (o.getUsed() == false
                    && String.valueOf(Wordch).equals(o.getText())) {

                o.setUsed(true);
                sMatch = sMatch + String.valueOf(Wordch);
                break;
            }

        }
    }

    if (sMatch.equals(Word)) {
        return true;
    } else {
        return false;
    }
}

ご覧の通り大変な努力をしております。Evgeniy Dorofeevの答えは、ランダムな順序で文字で構成された文字列から単語を作成できるかどうかを調べるだけの目的にははるかに優れています。

4

3 に答える 3

5

試す

boolean containsWord(String s, String w) {
    List<Character> list = new LinkedList<Character>();
    for (char c : s.toCharArray()) {
        list.add(c);
    }
    for (Character c : w.toCharArray()) {
        if (!list.remove(c)) {
            return false;
        }
    }
    return true;
}
于 2013-03-29T11:48:47.720 に答える
0

最初の文字列のすべての文字を 1 つずつ検索します。

 String randomString = "RAHDTWUOPO";
 String word = "WORD";

 for(int i=0;i<word.length; i++){
      if(randomString.contains(word.charAt(i))){

         // Yey, another letter found
      }
 }

次に、すべてiの文字が実際に見つかったかどうかをテストするだけで済みます。そうでない場合は、単語が randomString に含まれていません。

于 2013-03-29T11:50:07.463 に答える
0

単語「WORD」のすべての文字がリストの入力文字列に一度存在することを確認する必要があります。単純なループでそれができますが、パフォーマンスは最高のものではありません。グアバ ライブラリ マルチセットを使用できます: http://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained

Multiset wordsMultiset = HashMultiset.create();wordsMultiset.addAll(words);// これで、wordsMultiset.count(String) を使用して単語の数を見つけることができます

この例は単語に関するもので、入力文字列の文字に採用します。

于 2013-03-29T11:50:50.317 に答える