hiho 1032 最长回文子串

来源:互联网 发布:淘宝买的考研内部资料 编辑:程序博客网 时间:2024/05/11 00:53

   样例输入
3abababaaaaabaaacacdas
   样例输出
753

   纯模板

#include <stdio.h>#include <string.h>#define min(x,y)  ( x<y?x:y )#define max(x,y)  ( x>y?x:y )const int MAXN=1100100;char Ma[MAXN*2];int Mp[MAXN*2];void Manacher(char s[],int len){    int l=0;    Ma[l++]='$';    Ma[l++]='#';    for(int i=0;i<len;i++)    {        Ma[l++]=s[i];        Ma[l++]='#';    }    Ma[l]=0;    int mx=0,id=0;    for(int i=0;i<l;i++)        {            Mp[i]=mx>i?min(Mp[2*id-i],mx-i):1;            while(Ma[i+Mp[i]]==Ma[i-Mp[i]])                Mp[i]++;                if(i+Mp[i]>mx)                {                    mx=i+Mp[i];                    id=i;                }        }}char s[MAXN];int main(){    int n;    scanf("%d",&n);    while(n--)        {            scanf("%s",s);            int len=strlen(s);            Manacher(s,len);            int ans=0;            for(int i=0;i<2*len+2;i++)                ans=max(ans,Mp[i]-1);            printf("%d\n",ans);        }            return 0;}

0 0
原创粉丝点击