Java 使用字符串列表搜索输入编号(类似于t9字典)
T9字典是如何工作的?它背后的数据结构是什么。例如:有16个单词的列表/字典(全部大写)。您将以数字形式输入,相应的输出应该是与字典中的数字匹配的单词。如何在C/C++/JAVA中实现这一点。[如果列表中添加了任何单词,它也应该支持]Java 使用字符串列表搜索输入编号(类似于t9字典),java,c++,c,Java,C++,C,T9字典是如何工作的?它背后的数据结构是什么。例如:有16个单词的列表/字典(全部大写)。您将以数字形式输入,相应的输出应该是与字典中的数字匹配的单词。如何在C/C++/JAVA中实现这一点。[如果列表中添加了任何单词,它也应该支持] 2:A/B/C 3:D/E/F 4:G/H/I 5:J/K/L 6:M/N/O 7:P/Q/R/S 8:T/U/V 9:W/X/Y/Z LIST{DRAWING,PAINTING,DANCE.....} 输出窗口示例: Input : 3729464 outp
2:A/B/C
3:D/E/F
4:G/H/I
5:J/K/L
6:M/N/O
7:P/Q/R/S
8:T/U/V
9:W/X/Y/Z
LIST{DRAWING,PAINTING,DANCE.....}
输出窗口示例:
Input : 3729464
output : DRAWING
如果简单直接查找完整单词就足够了,最好编写一个函数,用相应的数字替换单词的字符:
A,B,C -> 2
D,E,F -> 3
等等
然后将该函数应用于所有字典条目,并将结果存储为键,但将原始形式存储为哈希表(或类似数据结构)的值。由于每个数字可以表示多个不同的字符,因此同一个键可能必须映射到多个值。您可以使用字符串列表作为值类型:
entries(3829464) = [DRAWING]
entries(72468464) = [PAINTING]
entries(843) = [THE,TIE]
等等
然后,您可以直接根据散列的键搜索给定的输入数字序列,并轻松地检索作为现成列表的所有候选项
实际的T9函数也支持延续:输入一个数字序列,并检索可能是输入序列延续的所有字符串。因此,搜索trie是一种很好的数据结构。同样,字符转换产生的数字最好用作trie的转换标签,字符串的原始形式最好存储在接受状态。您可能希望在内部节点中存储其他信息,例如在给定节点下的子节点中找到的接受状态总数;这将有助于您在O(1)时间内决定是否开始遍历子项以检索所有继续候选项,或者最好等到用户提供更多输入。这不是问题的答案: T9不是也会猜单词吗?我假设那里有一棵像weigthed tree的树,猜测到目前为止输入的数字序列中最可能的(三个左右)单词。那将比O(1)更合适
这里似乎并不需要这些,但我只是好奇。试试前缀树或“trie”。@KerrekSB还有其他方法吗?如果你想做一些简单的事情,只需从数字字符串中创建可能的单词列表,然后将它们放在你的dictionary@SwethaDMurthy您可能希望在帖子中使用不同的标签。如果你真的想要C/C++/Java代码,这三个标签是合适的,但是你不可能得到你想要的(参见示例)。但是,如果您的主要兴趣是算法思想,也许“算法”和“字符串匹配”是合适的标记。