说我有一个字符串可能看起来像:
“RAHDTWUOPO”
我知道我正在寻找的这个词,例如:
“WORD”
如果能用“RAHDTWUOPO”这样的字符串组成“WORD”,最好的方法是什么
编辑:
由于这个问题不明确,我认为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;
}
}
你可以看到很多努力。 Evgeniy Dorofeev的答案要好得多,只是为了找到一个单词是否可以由一个由随机顺序的字母组成的字符串组成。
答案 0 :(得分: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;
}
答案 1 :(得分: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中。
答案 2 :(得分:0)
你需要找到,你的单词“WORD”中的所有字母都存在于列表输入字符串中一次。 简单循环将为您完成,但性能不是最好的。 您可以使用guava库multiset: http://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained
Multiset wordsMultiset = HashMultiset.create(); wordsMultiset.addAll(words); //现在我们可以使用wordsMultiset.count(String)来查找单词的计数
这个例子是关于单词的,将它用于输入字符串的字符。