2011-03-28 33 views
3

我有一个包含几千个单词的数组。我在我的网页上有一个输入字段,允许用户输入几个字母,然后点击搜索。当用户点击搜索时,应用程序应查看字典,看看可以从提供的字母中形成哪些单词。每个字母只能使用一次(如在拼字游戏中)。JavaScript算法来匹配字典中的单词

是否已有搜索库用于执行此类操作?如果没有必要,我不想重新发明轮子。如果没有,有没有人有高性能解决方案的想法。我想这已经做过数百万次了。

回答

1

你需要做的是什么单词数组转换成一个哈希表,其中的关键是每个单词的字母排序。例如:

['car', 'shoe', 'train'] 
=> {'acr': ['car'], 
    'ehos': ['shoe'], 
    'ainrt': ['train']} 

然后你把用户的信件,你对它们进行排序,和你做一个哈希表(任何字典IMPL会做,但哈希表是最有效的在这种情况下)使用排序后的字母键查找。与您的密钥相对应的列表是您可以对这些字母执行的单词列表。这具有O(n)的时间复杂度= 1

+0

我真的很喜欢这种方法的想法,但你有没有当您还允许使用提供的字母的子集时,您还有什么提示?例如。字母'c','a','r'和's'可以拼写'car'和'cars'。 – Michiel 2012-07-17 16:48:31

+1

然后,你可能需要尝试:http://en.wikipedia.org/wiki/Trie,虽然我不确定这是否在任何js库中实现 – 2013-05-21 01:04:05