#include <bits/stdc++.h>
using namespace std;
int p[22000022],ans=-1;
char s[22000022],ss[22000022];
int init(){
int i,j=2;ss[0]='$';ss[1]='#';
for(i=0;i<strlen(s);i++){ss[j++]=s[i];ss[j++]='#';}
ss[j]='\0';return j;
}
int manacher(){
int id,m=0,i,l=init();
for(i=1;i<=l;i++){
if(i<m) p[i]=min(p[2*id-i],m-i);else p[i]=1;
while(ss[i-p[i]]==ss[i+p[i]])p[i]++;
if(m<i+p[i]){id=i;m=p[i]+i;}
ans=max(ans,p[i]-1);
}return ans;
}
int main(){
scanf("%s",&s);
printf("%d",manacher());
return 0;
}
这是TLE代码,但是当我们将init()改成
int init(){
int i,j=2,LEN=strlen(s);ss[0]='$';ss[1]='#';
for(i=0;i<LEN;i++){ss[j++]=s[i];ss[j++]='#';}
ss[j]='\0';return j;
}
之后???就A了????????哪位大佬能给蒟蒻科普一下(瑟瑟发抖)