manacher,也叫马拉车,是一个回文串匹配算法,代码短小精干,也好理解。 我这里放一个讲的好的人的blog: 模板题代码:
#include#include #include using namespace std;int n,ans;char t[52000005],in[21000005];int p[52000005];void manacher(){ int mx=0,mid=0; for(int i=1;i<=n+n+3;i++){ if(i<=mx)p[i]=min(p[2*mid-i],mx-i); else p[i]=1; while(t[i+p[i]]==t[i-p[i]])p[i]++; if(i+p[i]>mx)mx=i+p[i],mid=i; }}int main(){ scanf("%s",in); n=strlen(in); t[0]='$';t[1]='#'; for(int i=0;i