【发布时间】:2010-06-09 20:11:17
【问题描述】:
对于给定的 int 序列检查双回文数,其中双回文是指两个相同回文的序列,它们之间没有中断。比如:
在 1 0 1 1 0 1 中,我们有 1 0 1 作为回文,它连续出现 2 次,
在 1 0 1 5 1 0 1 我们有 1 0 1 但它是分开的
(除了这些序列中的其他回文)
问题示例测试数据为:
3
12 0 1 1 0 0 1 1 0 0 1 1 0
12 1 0 1 0 1 0 1 0 1 0 1 0
6 3 3 3 3 3 3
有答案
8 0 9
Manacher 对于乞讨是显而易见的,但我不确定下一步该做什么。任何想法表示赞赏。我猜复杂度应该低于 n^2。
编辑:int 在这里被视为字母表的单个元素
【问题讨论】:
-
这是作业吗?这似乎不是一个具有实际相关性的问题......
-
您是在寻找所有回文还是最长的回文?您的示例包含回文
11和00作为其他人的子回文。他们应该都被识别,还是不被识别? (我假设要求是length(palindrome)>1)。 -
是的,答案是所有回文数,单个部分的长度可能为 1,从示例测试数据中可以看出。 @Mark - 你可以这样称呼它。它没有实际意义……它是大学常用算法科目的一部分。
-
@jakubmal:你的教授讨论过寻找所有回文的算法吗?如果我们将这些回文限制为均匀长度会怎样?
-
@Moron:我的意思是 Manacher 是查找所有回文的算法(并且已经提出)。我通过在从 io 读取时在每个元素之间插入 -1 来消除偶数/奇数回文问题。实际上我在读高中,但我们有一种 AP 课程。
标签: algorithm palindrome