manacher小结
Posted y2823774827y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了manacher小结相关的知识,希望对你有一定的参考价值。
题目大意
n个字符组成的字符串,求最长回文串
$O$$($$n^3$$)$
枚举两端点,暴力往中间搜
$O$$($$n^2$$)$
枚举回文串终点,暴力往两边搜
$O$$($$n$$)$
$first:$
$j$与$i$关于pos对称,$S$为以$pos$为中间的回文串,$Maxright$为$S$的右端点,$s_1$为以$j$为中间的回文串
$s_2$为以$i$为中间的回文串
下面开始将$manacher$,要降低复杂度,就要减少重复的操作
$(1)$ $s_1$被$S$包含(且没到端点)
显然根据回文的性质$len_{s_1}$=$len_{s_2}$
$(2)$ $s_1$超过或触及端点
这时,我们只能确定,两条蓝线之间的部分(即不超过$Maxright$的部分)是回文的
于是从这个长度开始,尝试以i
为中心向左右两边扩展,直到左右两边字符不同,或者到达边界
不论以上哪种情况,之后都要尝试更新$Maxright$
和$pos$
,因为有可能得到更大的$Maxright$
$(3)$ 当$i$
在$Maxright$
的右边
遇到这种情况,说明以$i
为对称轴的回文串还没有任何一个部分被访问过,于是只能从i
的左右两边开始尝试扩展了,当左右两边字符不同,或者到达字符串边界时停止。然后更新$Maxright$
和$pos
$
以上是关于manacher小结的主要内容,如果未能解决你的问题,请参考以下文章