假设你有一系列单词
String[] arr = {"i", "a", "am", "good", "program", "gram"};
一个给定的密钥
String key = "iamgood";
boolean allWordsFound(arr, key){
// should return true if all possible words from array make up the key.
// e.g. keys matched {"i", "am", "good"};
}
我的方法:
boolean workbreak(String[] arr, String key) {
StringBuilder tempStr = new StringBuilder();
String[] possibleValues;
int count = 0;
for(i = 0; i < key.length()- 1; i++){
tempStr.append(key[i]);
for(j =0; j < arr.length(); j++){
tempStr == arr[j]{
return true;
//possibleValues[count] = tempStr;
//count++;
}
}
}
}
我无法找出方法。我不需要代码,但你可以建议一个算法。
答案 0 :(得分:1)
尝试以下方法:
按长度排序String数组,从最长到最短:
{"i", "a", "am", "good", "program", "gram"};
变为:
{"program","gram","good","am","a","i"}
这里的想法是首先匹配较长的单词,因为在这种情况下,你会希望匹配“am”#39;首先在与&#39; a&#39;匹配之前(使用contains函数)。
因此,该算法将检查&#34; program&#34;,然后&#34; gram&#34;,然后&#34; good&#34; (匹配),然后&#34; am&#34; (匹配),然后&#34; a&#34;,然后&#34; i&#34; (匹配)。
另一个解决方案就像评论中所述的bart.s:查找所有排列,然后检查是否有任何匹配。但这将是一个非常慢的算法。