检查单词是否由一个或多个连接的字典单词组成

时间:2011-03-17 18:26:03

标签: algorithm language-agnostic data-structures

以下是该方案:

我有一个数百万长度为3-32的随机字符串数组,以及一个单词数组(字典)。

我需要测试是否可以通过连接1,2或3个不同的字典单词来组成随机字符串。

由于字典单词会有所修正,我可以对它们进行任何预处理。

理想情况下,我希望通过对字典进行某种预处理来优化查找速度。

我应该考虑采用哪种数据结构/算法来实现这一目标?

3 个答案:

答案 0 :(得分:5)

首先,从你的词典中构建一个 B-tree,如 Trie结构。每个根都会映射到一个字母。然后,每个第二级子树将包含可以用两个字母组成的所有单词,依此类推。

然后接受你的话,从第一个字母开始,然后沿着 B-Tree Trie走,直到你找到一个匹配,然后递归地将这个算法应用到单词的其余部分。如果您在任何时候都找不到匹配项,则您知道无法通过concats形成单词。

答案 1 :(得分:2)

将字典字符串存储在散列集数据结构中。迭代您想要检查1,2或3个部分的字符串的所有可能拆分,并且对于每个这样的拆分,查找散列集中的所有部分。

答案 2 :(得分:0)

  1. 使正则表达式匹配词典中的每个单词。
  2. 在括号周围加上括号。
  3. 在最后加上+
  4. 使用任何正确的(基于DFA的)正则表达式引擎进行编译。