manacher 和 扩展KMP

manacher 和 扩展KMP

事实上,这两个东西是一样的。


考虑 manacher 的过程

我们实时维护最远扩展的位置 (mx) 以及这个回文串的回文中心 (l) ,那么显然当然位置如果没有超过 (mx)

,是可以利用与 (l) 的对称位置 (2l-i) 的信息的,然后判断一下是否可以延伸 (mx) 的位置

  • 也可以出一些有意思的东西

    给你一个长为 (n) 的串的 (2n+1) 的回文数组 (pa) ,求哪些字符是相等的。

    拿并查集维护的话,有一种类似于萌萌哒那个题倍增做法,但是多一个 (log)

    但是如果考虑 manacher 的过程,其实本质不同的相等位置只会在 (mx) 扩展的时候出现,就可以优化掉这个 (log)


考虑 扩展KMP

给你 (s,t) ,要求你求出 (t)(s[i,n]) 的所有 (lcp)

其实可以转换到求 (s[i,n])(s[1,n])(lcp)

同样维护 (lcp) 最远扩展的位置 (mx) 以及这个 (lcp) 的起始位置 (l) ,那么当前如果没有超过(mx) ,位置 (i) 可以利用 (i-(l-1))(s)(lcp) ,并判断是否可以扩展

可以发现和上面是一个东西的,写起来也差不多

原文地址:https://www.cnblogs.com/butterflydew/p/11131720.html