#include<bits/stdc++.h>
using namespace std;
string n,nn;
int s[22000010],ma=0;
int main()
{
cin>>nn;
int len=nn.length();
nn=" "+nn;
n=" @";
for(int i=1;i<=len;i++)
{
n=n+nn[i];
n=n+"@";
}
len=n.length();
int l=1,r=1;
s[1]=1;
for(int i=2;i<len;i++)
{
if(i<=r)
s[i]=min(s[l+r-i],r-i+1);
while(n[i+s[i]]==n[i-s[i]])
s[i]++;
if(i+s[i]-1>r)
{
l=i-s[i]+1;
r=i+s[i]-1;
}
if(s[i]>ma)
ma=s[i];
}
cout<<ma-1;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
char n[22000010],nn[22000010];
int s[22000010],ma=0;
int main()
{
cin>>nn;
n[0]=' ';
n[1]='@';
int len=strlen(nn+1);
int k=1;
for(int i=0;i<=len;i++)
{
n[++k]=nn[i];
n[++k]='@';
}
int l=1,r=1;
s[1]=1;
len=k;
for(int i=2;i<len;i++)
{
if(i<=r)
s[i]=min(s[l+r-i],r-i+1);
while(n[i+s[i]]==n[i-s[i]])
s[i]++;
if(i+s[i]-1>r)
{
l=i-s[i]+1;
r=i+s[i]-1;
}
if(s[i]>ma)
ma=s[i];
}
cout<<ma-1;
return 0;
}
P3805 manacher模板题, 用string就TLE,改成char数组就AC ,核心算法没变,求助orz