Manacher总结

可以求以位置\(i\)为中心的最长回文子串(其半径也等于以位置\(i\)为中心的回文子串个数。)

可以观察到一件事:奇回文串的回文中心为一个字符,偶回文串的回文中心为字符间的空隙。于是想办法统一奇偶回文子串。

我们可以在每两个字符的间隔中插入一个特殊字符(如#,首尾也要插入)。并且在构造好后再次在首尾插入两个不同的特殊字符以防越界(如$/@)。

观察到新串的\(R_i\)表示原串的对应回文中心的最长回文串长度加\(1\)

同Z函数一样考虑,维护最靠右的右端点\(r\)及其对应回文中心\(c\),记回文半径为\(R_c\)

考虑当前要计算的回文中心\(i\)

  • \(i>r\),暴力尝试拓展。

  • \(i\le r\),由对称性可知\(R_i\ge \min(r-i+1,R_{2c-i})\)。初始化后再尝试暴力拓展。

同Z函数分析,时间复杂度\(O(n)\)

暴力缩减信息

有时会出现类似 Manacher 维护回文串的结构的信息统计,但是继承信息时无法和当前右边界简单取 min 来缩减信息。

结论是暴力遍历超出边界的位置减去信息,复杂度仍然正确。不会证为什么对,反正是线性的。

posted @ 2025-04-18 17:01  RandomShuffle  阅读(11)  评论(0)    收藏  举报