【问题标题】:Append new characters to a Palindrome. Efficient or Dynamic way to check if the new string still a Palindrome?将新字符附加到回文。检查新字符串是否仍然是回文的有效或动态方法?
【发布时间】:2018-06-09 14:41:09
【问题描述】:

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

【问题讨论】:

  • 你能举一些满足这个标准的回文(偶数长度、奇数长度或两者兼有)的例子吗?在我的脑海中,我只能想到一个字符的回文,并附加相同的字符,例如aaa --> aaaa
  • @Keeler 现在你问我想我在想这个问题.....我认为回文唯一一次仍然是回文是如果所有字符都相同并且我们添加相同人物。 (加上空字符串大小写).....对吗?伙计,现在我觉得自己很愚蠢......为什么我会因为这样一个简单的问题而失眠......叹息

标签: algorithm palindrome


【解决方案1】:

将来自 cmets 的同字符猜想形式化:

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

  • 一个字符C1在索引P1,后跟一个不同的C2P1+1
  • C1 在镜像索引N-1-P1,前面是C2N-2-P1

在 S 中添加任意单个字符后,现在必须有:

  • 一个字符C1在索引P1,后跟C2P1+1
  • 镜像索引处的C1,现在为N-P1,前面是C2,位于N-1-P1

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

所以,只有当原始字符串是单个字符的重复时,才有可能逐个字符地扩展它并保持它是回文。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 2015-05-30
    • 2012-04-05
    相关资源
    最近更新 更多