AC自动机
KMP可以很好的解决单个模式串的问题,但是如果我们有多个模式串呢。
我们可以使用AC自动机来解决这类问题。
首先我们对于多个模式串建出一颗 \(trie\) 树。
类似于KMP,我们考虑如果下一步失配应该跳到哪里去。
考虑维护一个 \(fail\) 指针来确定当前没有后继的 \(son\) 时的可能的去处。
再维护一个 \(go_i\) 来确定当前没有后继 \(i\) 的去处。
具体的说:
对于没有后继时,我们可以u->go[i]=u->fail->go[i];。
对于有后继时,我们可以u->go[i]->fail=u->fail->go[i];。
匹配时顺着 \(go_i\) 走就可以了。

浙公网安备 33010602011771号