说我有一个回文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
从评论中形式化相同字符的猜想:
如果字符串S
中具有N
字符的所有字符都不相同,则必须:
C1
在索引P1
,然后在C2
不同的P1+1
C1
的N-1-P1
,在C2
的N-2-P1
之前向S添加任何单个字符后,现在必须:
C1
在索引P1
,然后是C2
在P1+1
C1
,现在是N-P1
,之前是C2
的N-1-P1
所以,N-1-P1
的角色必须是C1
(在扩展之前)和C2
(在扩展之后),这是不可能的,因为我们说它们是不同的。
因此,只有当原始字符串是一个单个字符的重复时,是否可以扩展每个字符的字符并使其成为回文。