如果我有字符串 A 和许多其他字符串,我想看看是否有任何其他字符串在 A 中。
什么算法可以在尽可能少的迭代中做到这一点?
例如:
“你好,我叫鲍勃。”
我想看看是否包含“name is b”,它从 [11] 开始。
我不打算使用正则表达式库。
谢谢
最佳答案
最有效的算法是 Aho-Corasick algorithm ,给定一个长度为 n 的字符串和一组总长度为 m 的字符串可以在时间 O(n + m + z) 中找到所有匹配项,其中 z 是报告的匹配项总数。它基于有限自动机,是 KMP string matching algorithm 的推广。 .
此算法的一个很酷的方面是,如果您有一组固定的关键字和一堆要搜索的文本字符串,则可以通过执行 O(m) 预处理来构建匹配器来加快算法速度。然后,您可以在时间 O(n + z) 中找到长度为 n 的字符串中的所有匹配项。
另一方面,如果您有一个固定的字符串,然后想要匹配一组不同的模式字符串,请考虑查看 suffix trees ,它提供相同的运行时保证,但如果文本是固定的,则速度更快。
希望这对您有所帮助!
关于c++ - 检查字符串是否包含另一个字符串算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10892088/