Manacher算法

基本概念

  1. 回文半径
  2. 回文半径数组
  3. R 回文最右边界 (初始R = -1)
  4. C 取得回文最右边界的中心点 (R更新 C才更新)

情况分类

i为当前位置

  1. i在R外 (R = -1 ,i= 0):
    暴力扩
  2. i在R内:
    做R关于C的对称位置L,i关于C的对称位置i’
  • i’ 的回文直径在R的彻底在L、R的内部,则i的回文半径和i’相同。


    Manacher算法_第1张图片
    image.png
  • i’回文区域在L,R外边,则i的回文半径为R-i


    Manacher算法_第2张图片
    image.png
  • i’的回文半径与L重合,则看R外边的字符X是否与i对称X’相同


    Manacher算法_第3张图片
    image.png

时间复杂度

绑定参数R ,O(n)

拓展

在一个字符串后面添加字符串,使原字符串变成回文字符串,要求添加的字符串最短。

思路:找到第一个将最后一个字符囊括的回文半径,将不在该回文半径里的字符逆序添加到字符串后面。

你可能感兴趣的:(Manacher算法)