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) ,并判断是否可以扩展
可以发现和上面是一个东西的,写起来也差不多