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]; } } }

猜你喜欢

转载自www.cnblogs.com/dyzll/p/9790258.html