要求
- 目前我们有一个包含上万个关键词或句子的列表(数量为N)
- 输入一个长字符串,长度为L
问题:检查字符串是否包含给定列表中的关键字或句子
该问题可以描述为wikipedia上的单词过滤器,但我在该页面上没有找到任何算法。解决此问题的最简单方法是迭代所有关键字或句子,并且每次检查长文本是否包含此类子字符串。由于我们有多个关键字,同时考虑到长文本,性能很差。它使用 O(NL) 时间
似乎更好的解决方案应该在 O(L) 中完成。有人可以对此提出一些建议吗?
有几种方法可以解决这个问题,时间复杂度为 O(M + L),其中 L 是字符串的长度,M 是所有模式的组合长度:
您可以在这本书中找到所有这些算法(除了 Commentz-Walter 算法)的详细信息:Dan Gusfield 的字符串、树和序列算法。
如果您可以明确地从输入字符串中提取单独的单词/句子,则可以使用几种不同(更简单)的方法。