Extend to Palindrome 题解

传送门

首先很显然的一种方法是直接以 \(s\) 当作 \(s*\) 回文串的左半部分再将右半部分拼上,但这显然在一些情况下是没必要的。

观察下面的例子:

abbb

如果想我们刚才一样去拼的话得到的就是:

abbbbbba

但是答案显然是:

abbba

观察到了什么?

因为其中存在回文串 bbb,我们可以利用他的回文性质来简短 \(s*\) 长度。

但是我们又发现只有回文串在 \(s\) 的末尾,即 \(s\) 的后缀,才能帮我们减短长度:比如当 \(s\) abbbc 时, bbb 就起不到作用了。

所以为了新的 \(s*\) 要最短,我们只需要找出 \(s\)最长回文后缀,再将 \(s\) 的非最长回文后缀部分反着拼到前面即可。

posted @ 2023-06-21 08:48  Pwtking  阅读(13)  评论(0)    收藏  举报