要求
问题:检查字符串是否包含给定列表中的关键字或句子
问题可以描述为wikipedia上的字词过滤器,但我在该页面上找不到任何算法。解决这个问题的最简单方法是迭代所有关键字或句子,每次检查长文本是否包含这样的子字符串。由于我们有很多关键字,也考虑到长文本,性能非常糟糕。它使用O(NL)时间
似乎应该在O(L)中完成更好的解决方案。任何人都可以对此提出一些建议吗?
答案 0 :(得分:4)
这个问题有几种方法,时间复杂度为O(M + L),其中L是字符串的长度,M是所有模式的组合长度:
您可以在本书中找到所有这些算法的详细信息(Commentz-Walter算法除外):Algorithms on Strings, Trees and Sequences by Dan Gusfield。
如果您可以明确地从输入字符串中提取单独的单词/句子,则可以使用几种不同的(更简单的)方法。