-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

您在第一个字符串中逐个搜索每个字母。

 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 回答