求解最长回文字串——Manacher 算法

之前用动态规划法和中心扩散法求解过这个问题,复习戳这里:LeetCode——5,最长回文子串,看这篇之前,如果不是很明白这个问题的通用解法,先看懂这个再往下看。
鉴于dp和中心扩散法,时间复杂度都为n方,在这里,我们对中心扩散法进行优化,去掉多次访问同一位置,将中心扩散法优化为时间复杂度为n的算法。
这里我们先用分隔符,将长度为n的s,变为长度为2n+1的奇数长度数组,我们只需要处理奇数的情况。
定义如下值:

  • centerIndex :表示当前对称数组的中心点坐标
  • maxRightIndex : 表示以 centerIndex为中心点可以扩散到的最远index的值
  • i:代表当前要计算的解数组的中心变量
  • iMirror:代表i关于centerIndex在左侧的对称点
  • p[n] :代表以n为中心点,最长回文字串的半径

下面我们来讨论几种情况:

1,当 i>maxRightIndex 时:

求解最长回文字串——Manacher 算法_第1张图片
此时,i位于以centerIndex为中心,最大回文串右侧,此时求i处的最大半径,只能利用中心扩散法求解了。

你可能感兴趣的:(LeetCode练习)