s[]爲加了特殊符號的數組 java
p[]爲用來表示以i爲中心的迴文子串數組
pR表示當前最大的迴文子串長度,index表示當前最大回文子串的中心code
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; }