ZZULI 1861: 斗破苍穹【回文字符串】
来源:互联网 发布:自由主义 知乎 编辑:程序博客网 时间:2024/05/16 18:53
1861: 斗破苍穹
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 206 Solved: 47
SubmitStatusWeb Board
Description
有一天, 我们帅气的LC来到加玛帝国. 有时候, 缘分就是这么奇怪, LC和加玛帝国的公主一见钟情, 奈何公主的父王不同意, 因为他觉得LC除了长得特别帅之外, 并没有一技之长.
LC对此呵呵一笑, 他说, 我可是创新实验室走出来的学生, 我会的技能可多着呢, 先说个简单的吧, 只要你给我任意一串字符串, 我就能立马算出这串字符串当中最长回文串的长度. 国王很是吃惊, 说要考一考LC.
于是国王想让你帮忙写一个程序, 用来比对LC的答案, 快来帮帮国王吧!
Input
第一行输入一个T(T <= 50), 表示一共有T组测试数据. 接下来T行, 每行为一组由小写字母组成, 长度不超过10^5的字符串.
Output
每行一个整数X, 表示该组字符串中所包含的最长回文长度.
Sample Input
3
aba
abc
aabaa
Sample Output
3
1
5
思路:回文子串(Manacher)算法
AC-code:
#include<cstdio>#include<cstring>int p[200005];int main(){int T,i,len,j,mx,id,sum;char str[100005],s[200005];scanf("%d",&T);while(T--){scanf("%s",str);len=strlen(str);s[0]='?',s[1]='#';for(i=0;i<len;i++){s[2*i+2]=str[i];s[2*i+3]='#';}s[2*i+2]='\0';mx=0;id=0;for(j=1;j<2*i+2;j++){if(mx>j)p[j]=p[2*id-j]>mx-j?mx-j:p[2*id-j];elsep[j]=1;while(s[j-p[j]]==s[j+p[j]])p[j]++;if(p[j]+j>mx){mx=p[j]+j;id=j;}}sum=0;for(i=1;i<j;i++)sum=sum>p[i]?sum:p[i];printf("%d\n",sum-1); } return 0; }
0 0
- ZZULI 1861: 斗破苍穹【回文字符串】
- 1861: 斗破苍穹
- 1861: 斗破苍穹 【最长回文子串】
- 斗破苍穹
- 斗破苍穹RPG
- 斗破苍穹
- 4》斗破苍穹
- 斗破苍穹里的那些女人
- ZZULIOJ-1961 斗破苍穹(马拉车算法)
- zzuli OJ 1077: 字符串加密
- 还是回文 && 回文字符串
- 字符串回文
- 回文字符串
- 回文字符串
- 回文字符串
- 回文字符串
- 回文字符串
- 字符串回文
- 简单的抽屉效果
- 各类排序算法的c++实现
- python数据转换
- Power of Two
- 二叉树、满二叉树和完全二叉树
- ZZULI 1861: 斗破苍穹【回文字符串】
- UVA10003固定点切木棍,怎么切使得每次切之前的木棍长度总和最小
- GDB相关
- javaFX webview实现
- #1286 : 子矩阵求和
- Javascript中的apply、call、bind
- 剑指offer系列之34:数组中的逆序对
- IP地址类
- 分布式文件系统HDFS原理与操作