void manacher() {
int id, mx = 0; //mx为已知回文字符串触及到最远的下标 id为mx对应的回文中心
for(int i = 1; i < newlen; i++) {
if(mx >= i)
p[i] = min(p[2 * id - i], mx - i + 1);
for(; newstr[i - p[i]] == newstr[i + p[i]]; p[i]++);
if(i + p[i] - 1 > mx) {
mx = i + p[i] - 1;
id = i;
}
}
} //预处理$#a#a#a#
Manacher(回文字符串)
最新推荐文章于 2025-03-16 15:57:12 发布