s[]为加了特殊符号的数组
p[]为用来表示以i为中心的回文子串
pR表示当前最大的回文子串长度,index表示当前最大回文子串的中心
int Manacher(){
int i, pR=0, index;
int max=Integer.MIN_VALUE;
for( i=0; i<n; i++){
p[i] = pR>i ? Min(p[2*index-i], pR-i) :1;
while(i+p[i]<s.length && i-p[i]>-1)
if(s[i+p[i]]==s[i-p[i]])
p[i]++;
if( i+p[i]>pR) {
pR=i+p[i];
index=i;
}
max=Math.max(max, p[i]);
}
return max-1;
}