http://poj.org/problem?id=3974
模板题,Manacher算法主要利用了已匹配回文串的对称性,对前面已匹配的回文串进行利用,使时间复杂度从O(n^2)变为O(n)。
https://www.cnblogs.com/xiaoningmeng/p/5861154.html 详细解释
https://www.zhihu.com/question/30226229 这是复杂度O(n)的解释
代码
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 #include<iostream> 6 #include<map> 7 #include<ctime> 8 using namespace std; 9 const int maxn=1000010; 10 char c[maxn]; 11 char s[maxn*2]; 12 int p[maxn*2]; 13 int len; 14 void init(){ 15 len=strlen(c); 16 int j=1; 17 s[0]='$';s[1]='#'; 18 for(int i=0;i<len;i++){ 19 s[++j]=c[i]; 20 s[++j]='#'; 21 }s[++j]='