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

时间:2017-12-29 05:28:27

标签: algorithm palindrome

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

1 个答案:

答案 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(扩展后),这是不可能的,因为我们说它们不同。

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