这是this question.的后续行动。
如果我有一个字符串text
和一组其他字符串,我可以使用Aho-Corasick算法在text
中查找该集合的字符串。
现在我有一个dictionary
(字符串集)而不是text
我可以将dictionary
组织为trie或哈希表(甚至bst)。我可以应用Aho-Corasick算法来查找dictionary
中集合的所有字符串吗?
最佳答案
您可以应用修改后的算法。
假设树中的每个节点都有两种类型的边
1)边“可能是”,如果你在前缀,并得到一些字母,所以新的前缀仍然可以是前缀从字典中的某个单词。
示例:字典a a a和aaabc,如果您在aaa并收到一个字母b,则转到aaab。
2)边缘“不”,如果你在前缀,并得到一些字母,所以新前缀不在字典,你说这个词不在字典,并继续下一个词。
例如:字典a a a和aaabc,如果你在aaa并且收到一个字母c,你可以说这个单词不在字典中,然后继续下一个单词。
要构建树,您需要O(总字典长度)时间和O(长度)来检查每个单词,因此这将导致O(输入)算法。