说我有一个回文s
,我会继续在s
的末尾添加字符以获得乐趣。但是,一旦s不再是回文,我想停止。
现在我很懒,所以每次将新字符追加到s
时,我都不想重新扫描s
以确定它是否是回文。我想知道是否有更快的方法来通过利用s
已经是回文的事实来公式化/检查新的s
是否是回文。我觉得有一种方法可以利用这些信息,但我无法完全理解它。
我被困在思考过程中。到目前为止,我试图将事情分解为案例。
回文s
可以有两种形式:(|__M__|
是s
的子串部分,|__-M__|
是|__M__|
的反转部分)
当长度为奇数时:
|__-M__|X|__M__|
当长度均匀时:
|__-M__||__M__|
现在当我追加新角色c
时,有一种有效的方法来检查
|__-M__|X|__M__|c
< ----回文?
|__-M__||__M__|c
< ----回文?
答案 0 :(得分:0)
从评论中正式化相同字符的猜想:
如果字符串S
中包含N
个字符的所有字符都不相同,则必须:
C1
的字符P1
,后跟C2
的其他P1+1
C1
位于镜像索引N-1-P1
,前面有C2
N-2-P1
在向S添加任何单个字符后,现在必须有:
C1
的字符P1
,后跟C2
的{{1}} P1+1
镜像索引,现在为C1
,前面有N-P1
C2
因此,N-1-P1
处的字符必须同时为N-1-P1
(扩展前)和C1
(扩展后),这是不可能的,因为我们说它们不同。
因此,只有当原始字符串是一个单一字符的重复时,是否可以扩展每个字符的字符并使其成为回文。