尽量找了个字符串里面最简单的部分来入门

发现并没想象中的简单...

 

模板:

int p[N];

//s,n均为插入过#的  返回最长回文串长度 
int manacher(char *s,int n)
{
    int mx=0,id=0,res=0;
    for(int i=1;i<=n;i++)
    {
        p[i]=(mx>i?min(p[2*id-i],mx-i):1);
        while(i-p[i]>=1 && i+p[i]<=n && s[i-p[i]]==s[i+p[i]])
            p[i]++;
        
        res=max(res,p[i]-1);
        if(i+p[i]>mx)
            mx=i+p[i],id=i;
    }
    return res;
}
View Code

相关文章: