Extend to Palindrome 题解
首先很显然的一种方法是直接以 \(s\) 当作 \(s*\) 回文串的左半部分再将右半部分拼上,但这显然在一些情况下是没必要的。
观察下面的例子:
abbb
如果想我们刚才一样去拼的话得到的就是:
abbbbbba
但是答案显然是:
abbba
观察到了什么?
因为其中存在回文串 bbb,我们可以利用他的回文性质来简短 \(s*\) 长度。
但是我们又发现只有回文串在 \(s\) 的末尾,即 \(s\) 的后缀,才能帮我们减短长度:比如当 \(s\) 为 abbbc 时, bbb 就起不到作用了。
所以为了新的 \(s*\) 要最短,我们只需要找出 \(s\) 的最长回文后缀,再将 \(s\) 的非最长回文后缀部分反着拼到前面即可。

浙公网安备 33010602011771号