Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用字符串列表搜索输入编号(类似于t9字典)_Java_C++_C - Fatal编程技术网

Java 使用字符串列表搜索输入编号(类似于t9字典)

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

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
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代码,这三个标签是合适的,但是你不可能得到你想要的(参见示例)。但是,如果您的主要兴趣是算法思想,也许“算法”和“字符串匹配”是合适的标记。