我正在java中编写一个字典类的应用程序。我在word文档中有一个250万字的查找列表列表。我的字典基于移动应用程序。所以当用户键入4时我应该得到以字开头的单词字母即ghi,如果我输入2,我应该以ghi开头的字母和第二个字母是abc之一。
现在应该遵循什么方法。 1.根据空间和时间复杂度存储单词列表的数据结构应该是什么?
2.我很困惑,因为如果我输入15位数字,它几乎令人难以置信的组合,在输入所有数字之后进行暴力检查。所以我应该从单词开头,包含这些。
任何人都可以指导我吗?
答案 0 :(得分:2)
首先,你通过用相应的键替换每个字母来标准化你的单词(例如用g
替换每个h
,i
和4
,依此类推)。然后,您构造一个trie或其他一些前缀数据结构,以根据其正常化表示来存储单词。其余的很容易。
答案 1 :(得分:0)
我认为你应该建立一个结构,将每个世界映射成可以呈现的数字。并从这种映射构建映射。
因此,您需要List<Integer>
和Multiset(Map<Integer, Set<String>>
)并进行映射。
答案 2 :(得分:0)
想一想,也许你可以建立一个数字树。如你所说,每个数字代表3个字母。树的每个节点代表树中的一个字符,因此要存储单词“cow”,您的树将如下所示:
[1(abc) , 2 , 3 , 4 , 5 , 6 ...]
/\
[... 4 , 5 , 6 (mno) , 7 ... ]
/\
[... 7 , 8 , 9(wxyz) ]
在最后一个节点下,你会把单词cow和任何其他可以由同一系列字母组成的单词(如'any','bow','box')。然后,当用户键入'169'时,您可以显示在该节点中找到的所有树字母单词,然后显示由所选节点下的子节点找到的较长单词。