用于匹配字典中单词的 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 正则表达式模式,具有自定义单词边界

leetcode139.单词拆分

字典树(Trie树)

Javascript RegExp 用于精确匹配具有特殊字符的多个单词

什么是字典中少量模式的最简单快速的字符串匹配算法,以找到一个小字符串

AC自动机