AC自动机是一个建立在字典树上的算法,可以在线性时间复杂度内完成多字符串匹配。
我们对于所有匹配字串建一颗字典树,接下来,参考 KMP 算法,我们建立一个 fail 指针,相当于 KMP 的 next 数组,表示我们在失配时跳转到的结点。
参考 next 数组的求法,我们可以在对字典树进行广度优先搜索的同时求出 fail 指针。
即对于结点 $v$ 的 fail 指针,一直从其 father 的 fail 指针向前跳,直到匹配为止。
需要注意的是如果一个字符串被匹配了,那么其 fail 指针出也会被匹配,对于这点要预处理一下。
1 |
|
有个 break 调了一晚上,头疼。。。
luogu3808 的代码,板子题。