在Palindrome上添加新字符。高效或动态的方式来检查新的字符串是否仍然是回文?

问题描述 投票:1回答:1

说我有一个回文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

algorithm palindrome
1个回答
0
投票

从评论中形式化相同字符的猜想:

如果字符串S中具有N字符的所有字符都不相同,则必须:

  • 一个字符C1在索引P1,然后在C2不同的P1+1
  • 在镜像指数C1N-1-P1,在C2N-2-P1之前

向S添加任何单个字符后,现在必须:

  • 一个字符C1在索引P1,然后是C2P1+1
  • 镜像指数的C1,现在是N-P1,之前是C2N-1-P1

所以,N-1-P1的角色必须是C1(在扩展之前)和C2(在扩展之后),这是不可能的,因为我们说它们是不同的。

因此,只有当原始字符串是一个单个字符的重复时,是否可以扩展每个字符的字符并使其成为回文。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.