hdu 3068

来源:互联网 发布:数据平台运营管理办法 编辑:程序博客网 时间:2024/06/06 07:48
/*  详细资料  http://wenku.baidu.com/view/3031d2d3360cba1aa811da42.html   最长回文串 */#include<stdio.h>#include<string.h>const int maxn=110000+100;char str[maxn<<1],b[maxn];int p[maxn<<1];int min(int x,int y){  if(x<y)  return x;  return y;    }int main(){    int i,n,id;        while(scanf("%s",&b[1])!=EOF)    {       //printf("%d****\n" ,strlen(b+1));       for( i=1;b[i]!='\0';i++)       {         str[(i<<1)]=b[i];         str[(i<<1)+1]='#';       }       str[0]='?';       str[1]='#';       n=((i-1)<<1)+2;             // printf("(n)%d***\n",n);       str[n]='\0';           //   printf("%s",str);              memset(p,0,sizeof(p));               int MaxId=0;       int MaxLen=0;       id=0;              for(i=1;i<n;i++)       {          if(MaxId>i)            p[i]=min(p[2*id-i],MaxId-i);          else            p[i]=1;                  while(str[i+p[i]] == str[i-p[i]])            p[i]++;                   if(p[i]+i>MaxId)           {                MaxId= p[i]+i;                //MaxId=i;                   id=i;                        }                  if(p[i]>MaxLen)         {            MaxLen = p[i];                    }      }              printf("%d\n",MaxLen-1);   }    return 0;    }

原创粉丝点击