2013-03-29 115 views
-4

说我有一个字符串,它可能看起来像:查找单词

“RAHDTWUOPO”

我知道我要找的字,例如:

“WORD”

这将是寻找最好的方法,如果我可以弥补“WORD”包含“RAHDTWUOPO”的字符串

编辑:

因为这个问题是标识不清的认为Id投入更多的细节。我想达到的目的是要找出我之前知道的一个词是否可以由一串随机字母组成。不知道如何去做这个循环,或者是否有其他方法。

我拿出东西很快在我的头,但我知道这是很大的努力,但我把它放在这里做什么,我想实现这个问题更加清晰。

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; 
    } 
} 

正如你可以看到很多努力。叶夫根尼·Dorofeev答案是更加的只是发现如果一个字可以从随机顺序的字母组成的字符串进行的宗旨更好。

+6

什么样的方法你目前考虑的? –

+1

它会采取排列组合,并忘记它。对于一个没有采取任何行动来解决问题的人来说,这太复杂了。 – David

+0

你知道[String.indexOf(字符串str)(http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#indexOf(java.lang.String中) ) – Parth

回答

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; 
} 
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包括在内。

0

你需要发现,从你的话“WORD”的所有字母的输入字符串在列表中存在一次。 简单的循环会为你做,但性能不会是最好的。 您可以使用番石榴库多集: http://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained

多集wordsMultiset = HashMultiset.create(); wordsMultiset.addAll(字); //现在我们可以使用wordsMultiset.count(字符串),以找到一个词

的计数

这个例子是有关的话,它adopte你输入字符串的字符。