search用字符串列表输入数字(类似于t9字典)
search Input number with string list(similar to t9 dictionary)
T9字典是如何工作的?它背后的数据结构是什么。例如:有一个16个单词的列表/字典(全部大写)。您将以数字形式输入,相应的输出应该是与dictionary中的数字匹配的单词。如何在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不是也有猜单词的功能吗?我假设里面有一棵有重量的树,猜测到目前为止输入的数字序列中最可能的(三个左右)单词。那将比O(1)大得多。
这似乎不是真的需要,但我只是好奇。
相关文章:
- 类似于strcat()的函数出现问题
- 如何将C++闭包与变量参数同时重用——类似于JavaScript
- 算术运算的结果类似于:C浮点变量中的1/3
- 在数组中输入 n 个整数的列表,并以类似于钟摆来回移动的方式排列它们. 输入-1 3 2 5 4,输出5 3 1 2 4
- 创建类似于布尔值的变量类型
- 如何在 Arduino 字符串的开头添加元素.类似于 JS unshift();
- Java 中是否有类似于 C++ 中引用类型"&"的内容?
- C++未知长度字符串的数组,其行为类似于 Python 字符串列表
- 如何创建类似于 QVariant 的变体类
- 对于多个字符(如 ETX/STX 对),是否有类似于 std::quote 的东西
- 初始化命名空间中的变量是否类似于将它们初始化为类成员?
- C++中用于结构的纯数组的类似于TableView/DataFrame的通用功能
- 有没有类似于stoi的函数可以用于模板类
- 如何编写一个类似于kernellist_head的c++风格的双链表实现
- 序列化模式类似于boost::序列化
- 构造一个类似于JSON文件c++的字符串
- 多重继承中的派生类的行为类似于聚合
- 如何使更安全的C++变体访问者,类似于切换语句?
- C++ Python 中是否有类似于 help() 的函数
- search用字符串列表输入数字(类似于t9字典)