#include<stdio.h>
#include<string.h>
int min(int x,int y)
{
if(x>=y)
return y;
else return x;
}
int main(void)
{
char a[50],b[50],p[50],s[50];
int i,j,flag,l=0,id=0,rmax=0,maxi,max;
gets(a);
b[l++]='$';
b[l++]='#';
for(i=0;a[i]!='\0';i++)
{
b[l++]=a[i];
b[l++]='#';
}
b[l]='*';
p[0]=1;
for(i=1;i<=l;i++)
{
p[i]=(i>=rmax?1:min(p[2*id-i],rmax-i));
while(b[i+p[i]]==b[i-p[i]])
p[i]++;
if(i+p[i]>rmax)
{
rmax=i+p[i];
id=i;
}
}
max=p[0];
maxi=0;
for(i=1;i<l;i++)
{
if(max<p[i])
{
max=p[i];
maxi=i;
}
}
for(j=0;j<p[maxi]-1;j++)
{
printf("%c",a[(maxi-p[maxi])/2+j]);
}
return 0;
}
acm算法之马拉车算法
最新推荐文章于 2024-07-12 10:45:15 发布