if(hw[i]+1+mid>mr){
mr=mid+hw[i];
mid=i;
}
记录
原代码
#include<bits/stdc++.h>
using namespace std;
const int F=60000000;
int num=1,mid,mr,out,len;
int hw[F];
char a[F];
string s;
void work(){
for(int i=1;i<=num;i++){
if(i<mr){
hw[i]=min(hw[mid*2-i],mr-i+1);
}
else hw[i]=1;
for(;a[i-hw[i]]==a[i+hw[i]];hw[i]++);
if(hw[i]+1+mid>mr){
mr=mid+hw[i];
mid=i;
}
}
}
int main(){
cin>>s;
len=s.length();
a[0]=a[1]='#';
for(int i=0;i<len;i++){
a[++num]=s[i];
a[++num]='#';
}
a[++num]=0;
work();
for(int i=1;i<=num;i++){
out=max(out,hw[i]);
}
printf("%d",out-1);
return 0;
}