有人可以建议算法从字符串中的K个单词集中查找任何单词的出现吗?
例如:
单词集:{abc,xyz}
字符串: abc defghi abc jklab xyz
输出:{0,9,17} //字符串中单词的起始位置
比运行KMP K次更好!!!
答案 0 :(得分:1)
Aho-Corasick algorithm旨在搜索文本中给定字典中的任何单词。
这项任务有some other algorithms - 评论 - 沃尔特,拉宾 - 卡普(但是Aho-Corasic对于最坏的情况有更好的复杂性)
答案 1 :(得分:0)
如果您想在工业规模上执行此操作,请使用后缀树。您将每个后缀存储在字符串中,然后您可以在基本为O常量的时间内搜索子字符串,因为所有子字符串都是具有不同后缀的相同字符串。
然而,在后缀树证明复杂性之前,字符串需要很长时间(它们实际上用于扫描DNA序列数据等)。