最长回文 HDU - 3068 -Manacher

  • 最长回文
  •  HDU - 3068 
  • 以每个点 为中心的最长回文长度为 半径 -1
  • #include
    using namespace std;
    #define maxn 123465
    char str[maxn],cp[maxn*2];
    int p[maxn*2],len,ans;
    void manacher()
    {
        int mx=0,id=0;
        for(int i=1; ii?min(p[2*id-i],mx-i):1);
            while(cp[i-p[i]]==cp[i+p[i]])p[i]++;
            if(i+p[i]>mx)id=i,mx=i+p[i];
        }
    }
    int main()
    {
        while(scanf("%s",str)!=EOF)
        {
            ans=1;
            len=strlen(str);
            cp[0]='(',cp[1]='#';
            for(int i=0,j=2; i

     

你可能感兴趣的:(KMP)