[英]Logic for finding all possible words that can be spelled with a phone number on a dial pad
因此,我必須找到使用撥號盤上為每個號碼分配的字母可以用電話號碼拼寫的所有可能組合。 即:222 6262可以拼寫為“香蕉”。
給定任何長度小於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)等...
不知道怎么做,不知道哪個會更容易,不知道哪個會最有效。
我可以想到一個解決方案,但這取決於這些字典是在運行時更新還是在開發時固定。 如果這些詞典不隨時間變化,則可以執行以下操作:
我希望我說的清楚
更新
這是我在說的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;
}
如果您不對每個索引獲得的單詞數進行計數,則可以嘗試節省所有時間,而不是嘗試所有可能的組合,例如。 在findWholeWord(dictionary[2], 723); wordCount[2]=7;
findWholeWord(dictionary[2], 723); wordCount[2]=7;
因此,為了清楚起見,我們得到wordCount[0]=1; wordCount[5]=3;
wordCount[0]=1; wordCount[5]=3;
(我無法想象您會收到除“ A”以外的任何其他1個字母的單詞),這意味着您現在只需要運行1X3組合而不是7X7。 將節省與子詞匹配的時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.