HiHo #1032 : 最长回文子串 【Manacher算法】
来源:互联网 发布:手机html教程软件 编辑:程序博客网 时间:2024/03/29 22:48
#1032 : 最长回文子串
时间限制:1000ms
单点时限:1000ms
内存限制:64MB
- 样例输入
3abababaaaaabaaacacdas
- 样例输出
753
描述
小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。
这一天,他们遇到了一连串的字符串,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能分别在这些字符串中找到它们每一个的最长回文子串呢?”
小Ho奇怪的问道:“什么叫做最长回文子串呢?”
小Hi回答道:“一个字符串中连续的一段就是这个字符串的子串,而回文串指的是12421这种从前往后读和从后往前读一模一样的字符串,所以最长回文子串的意思就是这个字符串中最长的身为回文串的子串啦~”
小Ho道:“原来如此!那么我该怎么得到这些字符串呢?我又应该怎么告诉你我所计算出的最长回文子串呢?
小Hi笑着说道:“这个很容易啦,你只需要写一个程序,先从标准输入读取一个整数N(N<=30),代表我给你的字符串的个数,然后接下来的就是我要给你的那N个字符串(字符串长度<=10^6)啦。而你要告诉我你的答案的话,只要将你计算出的最长回文子串的长度按照我给你的顺序依次输出到标准输出就可以了!你看这就是一个例子。”
提示一 提示二 提示三 提示四-.-Manacher算法-.-手生了,中间码错了。。。。
代码:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char ch[1001000],cc[2002000];int shu[2001000];int ll,ans;void slove(){shu[0]=1;int zhong;zhong=ans=0;for (int i=1;i<ll;i++){<span style="color:#ff0000;">if (zhong+shu[zhong]>i)shu[i]=min(shu[2*zhong-i],zhong+shu[zhong]-i);</span>elseshu[i]=1;while (i-shu[i]>-1&&cc[i+shu[i]]==cc[i-shu[i]])shu[i]++;if (i+shu[i]>zhong+shu[zhong])zhong=i;if (shu[i]>ans)ans=shu[i];}return ;}int main(){int n;scanf("%d",&n);while (n--){scanf("%s",ch);ll=strlen(ch);cc[0]='#';int lp=1;for (int i=0;i<ll;i++){cc[lp++]=ch[i];cc[lp++]='#';}ll=lp;cc[lp++]=0;slove();printf("%d\n",ans-1);}return 0;}
0 0
- HiHo 1032 最长回文子串 (Manacher算法求解)
- HiHo #1032 : 最长回文子串 【Manacher算法】
- hiho#1032 : 最长回文子串 (manacher算法O(n)时间求字符串的最长回文子串 )
- 【算法】最长回文子串-Manacher算法(hihoCoder 1032)
- Manacher算法求最长回文子串
- Manacher算法求最长回文子串
- 最长回文子串(Manacher算法)
- Manacher算法 最长回文子串
- 最长回文子串的manacher算法
- 最长回文子串,Manacher算法
- Poj3974 最长回文子串 Manacher算法
- 最长回文子串 manacher算法
- Manacher算法(最长子回文串)
- hihocoder1032(最长回文子串manacher算法)
- HDU3068(最长回文子串manacher算法)
- 最长回文子串 用manacher算法
- hiho1032 : 最长回文子串 Manacher算法
- 最长回文子串 - Manacher算法
- 【HDU 2586】测板
- 工厂方法(Factory Method)
- unity3d camera.culling mask
- 异常处理
- 模式识别作业2
- HiHo #1032 : 最长回文子串 【Manacher算法】
- Leetcode||9. Palindrome Number
- scanf遇到空格继续输入
- 函数、指针
- 总结
- Java多线程(三):线程栈模型与线程的变量
- 11 奇偶数分离
- Qt--基于UDP的网络广播
- iMX6Q开发环境搭建ycoto Linux3.10.53BSP