最长回文
来源:互联网 发布:日本女孩做饭知乎 编辑:程序博客网 时间:2024/05/18 02:38
最长回文
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 11085 Accepted Submission(s): 3946
Problem Description
给出一个只由小写英文字符a,b,c…y,z组成的字符串S,求S中最长回文串的长度.
回文就是正反读都是一样的字符串,如aba, abba等
Input
输入有多组case,不超过120组,每组输入为一行小写英文字符a,b,c…y,z组成的字符串S
两组case之间由空行隔开(该空行不用处理)
字符串长度len <= 110000
Output
每一行一个整数x,对应一组case,表示该组case的字符串中所包含的最长回文长度.
Sample Input
aaaa
abab
Sample Output
4
3
今天学习了一个关于O(n)的时间发杂度求最大回文串的;
思路很简单
#include <map>#include <list>#include <cmath>#include <queue>#include <stack>#include <string>#include <cstdio>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>#define eps 1e-9#define PI acos(-1.0)#define INF 0x3f3f3f3f#define CRR fclose(stdin)#define CWW fclose(stdout)#define WW freopen("output.txt","w",stdout)#define RR freopen("input.txt","r",stdin)using namespace std;const int MAX=220010;char s[MAX];char str[MAX];int p[MAX];int len;void Change(){ len=1; str[0]='$'; for(int i=0;s[i]!='\0';i++) { str[len++]='#'; str[len++]=s[i]; } str[len++]='#'; str[len]='\0';}void Get_P(){ int id=0; Change(); memset(p,0,sizeof(p)); for(int i=1;i<len;i++) { p[i]=id+p[id]>i?min(p[id]+id-i,p[2*id-i]):1; while(str[i+p[i]]==str[i-p[i]]) p[i]++; if(p[i]+i>p[id]+id) { id=i; } }}int main(){ while(~scanf("%s",s)) { Get_P(); int ans=1; for(int i=1;i<len;i++) { ans=max(ans,p[i]); } printf("%d\n",ans-1); }}
0 0
- 最长回文
- 最长回文
- 最长回文
- 最长回文
- 最长回文
- 最长回文
- 最长回文
- 最长回文
- 最长回文
- 最长回文
- 最长回文
- 最长回文
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文长度
- 最长回文子串
- 最长回文子串
- linux文件排序命令
- 算法速成(6)树操作
- JDBC杂记学习
- GCC 64位程序的makefile条件编译心得——32位版与64位版、debug版与release版(兼容MinGW、TDM-GCC)
- 南邮 OJ 1017 乘积最大
- 最长回文
- JAVA获取IP地址和本机IP地址的工具类
- 你是码农还是优秀程序员?
- COPY 系统吞吐量(TPS)、用户并发量、性能测试概念和公式
- Server Tomcat v7.0 Server at localhost failed to start
- 计算程序运行时间,精确到毫秒级
- java Map接口源码分析
- Algorithms—28.Implement strStr()
- java集合(ArrayList)