2016-11-17 29 views
-2

说你有话检查字符串数组的所有元素,打造一个给定词

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

你是否尝试过自己解决它? –

+0

@ bart.s是的,我的方法是在键上运行一个循环,并创建所有可能的子字符串。然后检查这些子字符串是否存在于数组中。但问题是我无法决定如何使用适当的密钥。例如:如何丢弃“a”,而是使用“am” –

+0

将代码粘贴到问题描述中,以便我们可以修改您的解决方案,并准确撰写您的疑问。如果我们看不到您的输入,并且没有详细说明,我们将无法为您提供帮助。 –

回答

1

请尝试以下

{"i", "a", "am", "good", "program", "gram"}; 

变为:

{"program","gram","good","am","a","i"} 

这里的想法是首先匹配更长的单词,因为在这种情况下,您希望先匹配'am',然后再匹配'a'(使用contains函数)。因此,该算法将检查“程序”,然后“克”,然后“好”(匹配),然后“am”(匹配),然后“a”,然后“我”(匹配)。

另一种解决方案就像bart.s在评论中所述:查找所有排列,然后检查是否有某个匹配。这将是一个非常缓慢的算法。

相关问题