多串匹配,类似于KMP,可以看成是KMP的推广。
首先建立所有匹配串的trie,然后对该trie建立fail指针。
匹配文本时,只要让文本在改自动机上跑一遍就可以得到所有匹配成功的位置。
具体实现可以用指针,也可以用数组,但是数组要求的空间很大。
有一个优化,就是fail指针的传递可以用类似disjoint-set路径压缩的技巧把上面代码的第51行的for去掉。
只需要修改build_ac_automation部分代码:
多串匹配,类似于KMP,可以看成是KMP的推广。
首先建立所有匹配串的trie,然后对该trie建立fail指针。
匹配文本时,只要让文本在改自动机上跑一遍就可以得到所有匹配成功的位置。
具体实现可以用指针,也可以用数组,但是数组要求的空间很大。
有一个优化,就是fail指针的传递可以用类似disjoint-set路径压缩的技巧把上面代码的第51行的for去掉。
只需要修改build_ac_automation部分代码: