回文自动机小记

构建

口胡一下过程:

  • \(fail\) 边指向自己的最长回文后缀(偶根指向奇根)。

  • 定理:每添加一个字符,至多新增一个新的本质不同的回文串,且是所有 回后缀中最长的。

    由此得出推论:本质不同的回文子串(回文自动机的点数)不超过 |S|

  • 暴力跳终止链,找到第一个左侧有 \(x\) 的回文后缀 \(v\)

    维护转移边,若 \(v\) 已经有 \(x\) 出边,找到该节点 \(d\),本次终止链末尾即为 \(d\)。否则,新建一个点 \(u\),且 \(len_u=len_v+2\)

    维护 \(fail\) 边,找到下一个旧的回文后缀 \(v'\) 满足左边有一个 \(x\),此时必有 \(x\) 出边,找到该节点 \(u'\),则 \(fail_u=u'\)

  • 时间复杂度均摊 \(\mathcal{O}(n)\)

posted @ 2024-08-25 15:33  xishanmeigao  阅读(6)  评论(0编辑  收藏  举报