zzulioj1861(最长回文子串)
来源:互联网 发布:棋牌源码交易 编辑:程序博客网 时间:2024/06/05 18:49
1861: 斗破苍穹
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 246 Solved: 64
SubmitStatusWeb Board
Description
有一天, 我们帅气的LC来到加玛帝国. 有时候, 缘分就是这么奇怪, LC和加玛帝国的公主一见钟情, 奈何公主的父王不同意, 因为他觉得LC除了长得特别帅之外, 并没有一技之长.
LC对此呵呵一笑, 他说, 我可是创新实验室走出来的学生, 我会的技能可多着呢, 先说个简单的吧, 只要你给我任意一串字符串, 我就能立马算出这串字符串当中最长回文串的长度. 国王很是吃惊, 说要考一考LC.
于是国王想让你帮忙写一个程序, 用来比对LC的答案, 快来帮帮国王吧!
Input
第一行输入一个T(T <= 50), 表示一共有T组测试数据. 接下来T行, 每行为一组由小写字母组成, 长度不超过10^5的字符串.
Output
每行一个整数X, 表示该组字符串中所包含的最长回文长度.
Sample Input
3abaabcaabaa
Sample Output
315
HINT
Source
//zzulioj1861(回文串)//题目大意:给你一列字符串,求出这列串中最长的回文子串.//解题思路:Manacher算法求最长回文串. #include<cstdio>#include<cstring>#include<algorithm>using namespace std; char s[100010],str[10000010];int p[10000010];int Manacher(int len){int mx=0,id=0,i,maxl=0;for(i=1;i<len;i++){if(mx>i){p[i]=min(p[2*id-i],mx-i);}else{p[i]=1;}while(str[i-p[i]]==str[i+p[i]]) p[i]++;if(i+p[i]>mx){mx=i+p[i];id=i;}}for(i=1;i<len;i++){if(maxl<p[i]) maxl=p[i];}return maxl;}int main(){int i,j,k,len,t;scanf("%d",&t);getchar();while(t--){scanf("%s",s);k=strlen(s);str[0]='@'; for(i=0,j=1;i<k;i++) { str[j]='#'; j++; str[j]=s[i]; j++; } str[j]='#'; len=2*k+1; int result=Manacher(len); printf("%d\n",result-1);}return 0;}
0 0
- zzulioj1861(最长回文子串)
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- rplidar A2 在机器人上的安装说明
- nodejs爬虫编码问题
- ubuntu 安装vmware
- [JavaScript/JQuery] js数组去重的4个方法
- NOIP2013普及组 T2 表达式求值
- zzulioj1861(最长回文子串)
- Apache 日志切割工具cronolog详解
- ZOJ 2975 Kinds of Fuwas【思维】
- 立即行动 & Be awesome
- [JavaScript/JQuery] JS检查浏览器类型和版本
- Android Studio 如何打开两个项目,以及切换到另一个项目
- Httpservlet cannot be resolved to a type的原因与解决方法
- 优化 listview 有哪些方法?
- [JavaScript/JQuery] JS禁用浏览器退格键