求解最长回文串 manachar算法

转载:http://blog.sina.com.cn/s/blog_70811e1a01014esn.html

 1 for(int i=1;i<len;++i){
 2             if(mx>i)
 3                 p[i]=min(p[2*id-i],mx-i);    //2*id-i是i关于id的对称点 
 4             else
 5                 p[i]=1;                
 6             while(str[i+p[i]]==str[i-p[i]])
 7                 p[i]++;
 8             if(p[i]+i>mx){
 9                 mx=p[i]+i;
10                 id=i;
11             }
12             if(p[i]-1>maxn)
13                 maxn=p[i]-1;
14         }

 

posted @ 2016-03-24 22:16  我不萌、我要高冷  阅读(189)  评论(0编辑  收藏  举报