最长回文字符窜(manacher算法)
来源:互联网 发布:nga宁芙 淘宝店地址 编辑:程序博客网 时间:2024/06/07 03:51
题目1 : 最长回文子串
时间限制:1000ms
单点时限:1000ms
内存限制:64MB
- 样例输入
3abababaaaaabaaacacdas
- 样例输出
753
描述
小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。
这一天,他们遇到了一连串的字符串,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能分别在这些字符串中找到它们每一个的最长回文子串呢?”
小Ho奇怪的问道:“什么叫做最长回文子串呢?”
小Hi回答道:“一个字符串中连续的一段就是这个字符串的子串,而回文串指的是12421这种从前往后读和从后往前读一模一样的字符串,所以最长回文子串的意思就是这个字符串中最长的身为回文串的子串啦~”
小Ho道:“原来如此!那么我该怎么得到这些字符串呢?我又应该怎么告诉你我所计算出的最长回文子串呢?
小Hi笑着说道:“这个很容易啦,你只需要写一个程序,先从标准输入读取一个整数N(N<=30),代表我给你的字符串的个数,然后接下来的就是我要给你的那N个字符串(字符串长度<=10^6)啦。而你要告诉我你的答案的话,只要将你计算出的最长回文子串的长度按照我给你的顺序依次输出到标准输出就可以了!你看这就是一个例子。”
/**< 最长回文字符窜 */#include <iostream>#include <stdio.h>#include <string.h>#define MAX 1000005+1200using namespace std;char str[MAX],temp[MAX];void getPreStr(char *str,int len){ int i; for(i=0;i<len;i++) { temp[2*i]='#'; temp[2*i+1]=str[i]; } temp[2*i]='#'; temp[2*i+1]='\0'; return ;}int getLenth(char *str){ int center=0,mx=0; int i,len=strlen(str); int *count =new int[len]; for(i=0;i<len;i++) { if(mx>i) { count[i]=min(mx-i,count[2*center-i]);/**< 核心公式 */ } else count[i]=1; while(i-count[i]>=0 && i+count[i]<len && (str[i-count[i]] == str[i+count[i]])) { count[i]++; } if(i+count[i]>mx) { mx=i+count[i]; center=i; } } int MaxStrLen=0; for(i=0;i<len;i++) { if(MaxStrLen<count[i]) MaxStrLen=count[i]; } delete []count; return MaxStrLen-1;}int main(){ int m,len; //freopen("in.txt","r",stdin); cin>>m; while(m--) { cin>>str; len=strlen(str); getPreStr(str,len); int len=getLenth(temp); cout<<len<<endl; } return 0;}
0 0
- 最长回文字符窜(manacher算法)
- 最长回文(Manacher算法)
- MANACHER最长回文算法
- 最长回文(manacher算法)(fromHDU)
- 最长回文(后缀数组||Manacher算法)
- hdu 3068 最长回文 (manacher算法)
- HDU 3068 最长回文(Manacher 算法)
- hdu 3068 最长回文(manacher算法)
- 最长回文字符串(manacher算法)
- Manacher算法(最长子回文串)
- Hdu 3068 最长回文(manacher算法)
- HDU 3068 最长回文(manacher算法)
- hdu3068 最长回文(manacher 算法)
- hdu3068最长回文(manacher算法)
- HDU3068 最长回文(Manacher算法)
- HDU3068 最长回文(Manacher算法)
- manacher算法(寻找最长回文)
- HDU 3068 最长回文(Manacher算法)
- 黑马程序员_多线程1
- Event Handler Method Signature Pattern
- 关于java的视频资料分享
- 黑马程序员_多线程2
- java基础<面向对象>总结(函数、封装、继承、多态)
- 最长回文字符窜(manacher算法)
- oracle表的连接
- 关于CSS“可变属性”(will-change),你需要知道所有的事情
- 是电影的沟通会复活点发货的风格和地方
- struts2入门二
- 黑马程序员_泛型
- linux驱动的入口函数module_init的加载和释放
- ArcGIS教程:什么是影像分类?
- 二维数组的最大最小值