检查字符串数组是否包含创建给定单词的所有元素

时间:2016-11-17 20:02:16

标签: java arrays algorithm

假设你有一系列单词

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

}

我无法找出方法。我不需要代码,但你可以建议一个算法。

1 个答案:

答案 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:查找所有排列,然后检查是否有任何匹配。但这将是一个非常慢的算法。