因此,我必须使用拨号盘上为每个号码分配的字母来找到可以与电话号码拼写的所有可能组合。即: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 的内容、与最后 2 个字母不匹配的 3 个字母和 2 个字母的单词)。我不知道如何遵循这个逻辑。我很确定这种逻辑有一个名字,因为我画了一棵树,它有一个很好的模式,但我不知道这个模式叫什么,也不知道它到底叫什么。
一种方法是找到所有子词并尝试以任何可行的方式将它们组合在一起,另一种方法是尝试所有可能的词长组合:(7), (6,1), (5,2 )、(5,1,1)、(4,3)、(4,2,1)、(4,1,2)、(4,1,1,1) 等等...
不确定如何做,不确定哪一个更容易,不确定哪一个最有效。
最佳答案
如果您计算每个索引的单词数,则可能会节省您的时间,而不是尝试所有可能的组合...
例如。在findWholeWord(dictionary[2], 723); wordCount[2]=7;
因此,为了清楚起见,您可以得到 wordCount[0]=1; wordCount[5]=3;
(我无法想象除了“A”之外您还会得到任何其他 1 个字母的单词),这意味着您现在只需运行 1X3 组合而不是 7X7。会节省您的子词匹配一些重要的时间。
关于java - 用于查找可在拨号盘上用电话号码拼写的所有可能单词的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13559124/