字符串

时间:2016-10-03 10:29:46

标签: string algorithm data-structures

有人可以建议算法从字符串中的K个单词集中查找任何单词的出现吗? 例如:
单词集:{abc,xyz}
字符串: abc defghi abc jklab xyz
输出:{0,9,17} //字符串中单词的起始位置

比运行KMP K次更好!!!

2 个答案:

答案 0 :(得分:1)

Aho-Corasick algorithm旨在搜索文本中给定字典中的任何单词。

这项任务有some other algorithms - 评论 - 沃尔特,拉宾 - 卡普(但是Aho-Corasic对于最坏的情况有更好的复杂性)

答案 1 :(得分:0)

如果您想在工业规模上执行此操作,请使用后缀树。您将每个后缀存储在字符串中,然后您可以在基本为O常量的时间内搜索子字符串,因为所有子字符串都是具有不同后缀的相同字符串。

然而,在后缀树证明复杂性之前,字符串需要很长时间(它们实际上用于扫描DNA序列数据等)。