使用java构建字典

时间:2010-12-12 12:33:58

标签: java data-structures dictionary

我正在java中编写一个字典类的应用程序。我在word文档中有一个250万字的查找列表列表。我的字典基于移动应用程序。所以当用户键入4时我应该得到以字开头的单词字母即ghi,如果我输入2,我应该以ghi开头的字母和第二个字母是abc之一。

现在应该遵循什么方法。 1.根据空间和时间复杂度存储单词列表的数据结构应该是什么?

2.我很困惑,因为如果我输入15位数字,它几乎令人难以置信的组合,在输入所有数字之后进行暴力检查。所以我应该从单词开头,包含这些。

任何人都可以指导我吗?

3 个答案:

答案 0 :(得分:2)

首先,你通过用相应的键替换每个字母来标准化你的单词(例如用g替换每个hi4,依此类推)。然后,您构造一个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'时,您可以显示在该节点中找到的所有树字母单词,然后显示由所选节点下的子节点找到的较长单词。