1. 程式人生 > >manacher模板整理

manacher模板整理

//p[]為最長迴文半徑長度,id為當前最靠右端迴文串的中心點(多個取最靠左),mx為id對應的迴文串的最右端座標+1
void
manacher(char *s,int len){ p[0] = 1; int mx = 0 , id = 0; for(int i = 1 ;i < len ; i ++){ p[i] = mx > i ? min(p[id*2 - i],mx-i) : 1; while(s[i+p[i]] == s[i-p[i]]) p[i] ++; if(i+p[i] > mx){ id
= i; mx = i +p[i]; } } }