#include<iostream>#include<string>#include<algorithm>usingnamespace std;char*manacher(string str){int n = str.length()*2+1;char* ch =newchar[n];int index =0;for(int i =0; i!=n; i++){
ch[i]=(i &1)==0?'#': str[index++];}return ch;}intmaxLcpsLength(string s){if(s.length()==0){return0;}char* ch =manacher(s);int n = s.length()*2+1;int* pArr =newint[n];//回文长度数组int C =-1;//回文中心int R =-1;//回文半径int Max = INT_MIN;for(int i =0; i != n; i++){
pArr[i]= R > i ?min(pArr[2* C - i], R - i):1;while(i + pArr[i]<n && i - pArr[i]>-1){if(ch[i + pArr[i]]== ch[i - pArr[i]]){
pArr[i]++;}else{break;}if(i + pArr[i]> R){
R = i + pArr[i];
C = i;}
Max =max(Max, pArr[i]);}return Max -1;}}intmain(){
cout <<maxLcpsLength("aabbcaabb")<< endl;system("pause");return0;}