用于匹配字典中单词的 JavaScript 算法
Posted
技术标签:
【中文标题】用于匹配字典中单词的 JavaScript 算法【英文标题】:JavaScript algorithm to match words in a dictionary 【发布时间】:2011-07-24 19:49:29 【问题描述】:我有一个包含几千个单词的数组。我的网页上有一个输入字段,允许用户输入几个字母,然后点击搜索。当用户点击搜索时,应用程序应该查看字典并查看可以从提供的字母中形成哪些单词。每个字母只能使用一次(如在 scrabble 中)。
是否已经有一个搜索库可以做这样的事情?如果没有必要,我不想重新发明***。如果没有,是否有人对高性能解决方案有想法。我想这在以前已经做过数百万次了。
【问题讨论】:
【参考方案1】:以 jQuery 闻名的 John Resig 也一直在思考这个问题:
http://ejohn.org/blog/dictionary-lookups-in-javascript/
【讨论】:
【参考方案2】:Steve Hanov 也为此写了一些文章:
http://stevehanov.ca/blog/index.php?id=120
【讨论】:
【参考方案3】:您需要做的是转换哈希表中的单词数组,其中键是排序的每个单词的字母。例如:
['car', 'shoe', 'train']
=> 'acr': ['car'],
'ehos': ['shoe'],
'ainrt': ['train']
然后您获取用户的字母,对它们进行排序,然后使用排序后的字母作为键进行哈希表(任何字典 impl 都可以,但哈希表在这种情况下最有效)查找。与您的键对应的列表是您可以使用这些字母执行的单词列表。这样做的好处是时间复杂度为 O(n) = 1。
【讨论】:
我真的很喜欢这种方法的想法,但是当您还允许使用所提供字母的子集时,您有什么建议吗?例如。字母“c”、“a”、“r”和“s”可以拼写“car”和“cars”。 然后,您可能需要尝试:en.wikipedia.org/wiki/Trie,尽管我不确定这是否在任何 js 库中实现以上是关于用于匹配字典中单词的 JavaScript 算法的主要内容,如果未能解决你的问题,请参考以下文章
用于匹配单词的 javascript 正则表达式模式,具有自定义单词边界
Javascript RegExp 用于精确匹配具有特殊字符的多个单词