因此,我必须使用拨号盘上为每个号码指定的字母,找到所有可以使用电话号码拼写的组合。即:222 6262可以拼写“A BANANA”。
给定任何数量的任何长度< 8,我可以找到匹配整数的所有单词。也就是说,findWholeWord(dictionary[2], 723)
会给我一个字符串数组{"RAD", "RAE", "RAF", "SAD", "SBF", "PAE", "PAD"}
(我给的字典有点笨......)。我的词典分为7个部分,每个部分包含相同长度的单词。
我不确定如何取一个7位数字并给出所有单词组合,例如一个单词长度为6,单词长度为1(6,1),5和2,5和1和1,4和3,4和2和1.我想抛弃任何不覆盖整个单词的东西(0或1的任何东西,3个字母和2个字母的单词与最后2个字母不匹配)。我不知道如何去理解这个逻辑。我很确定这种逻辑有一个名字,因为我绘制了一个树,它有一个很好的模式,但我不知道那个模式被调用了什么或它究竟是什么被调用。
一种方法是找到所有子词并尝试以任何有效的方式将它们组合在一起,另一种方法是尝试所有可能的词长组合:(7),(6,1),(5,2) ),(5,1,1),(4,3),(4,2,1),(4,1,2),(4,1,1,1)等...
不确定如何做,不确定哪个更容易,不确定哪个最有效。
答案 0 :(得分:0)
我可以想到一个解决方案,但这取决于这些词典是在运行时更新还是在开发时修复。如果这些词典没有随时间变化,您可以执行以下操作:
我希望我明确指出
<强>更新强>
这是我所说的sudo代码:
ArrayList<String> getWordsOf(String Number){
if(Number.isEmpty()){
return new ArrayList<String>();
}
ArrayList<String> allPossibleWords = new ArrayList<String>();
for(int i=1; i<=Number.length(); i++){
ArrayList<String> possibleWords = getFromDataBase(Number.substring(0,i));
ArrayList<String> restOfPossibleWords = getWordsOf(Number.substring(i,Number.length()-i));
for(String possibleWord:possibleWords){
for(String restOfPossibleWord:restOfPossibleWords){
allPossibleWords.add(possibleWord+" "+restOfPossibleWord);
}
}
}
return allPossibleWords;
}
答案 1 :(得分:0)
如果你计算每个索引的单词数量,那么它可以节省你的时间,而不是尝试所有可能的组合......
例如。在findWholeWord(dictionary[2], 723); wordCount[2]=7;
因此,为了清楚起见,我得到wordCount[0]=1; wordCount[5]=3;
(我无法想象你得到任何其他1个字母的单词而不是'A'),这意味着你现在必须只运行1X3组合而不是7X7。保存你的子词匹配一些重要的时间。