【LeetCode】求解最长回文长度

求解最长回文的问题有多种解法,这里对复杂度为O(n)的Manacher算法进行简单的介绍

Manacher算法

Manacher算法主要解决了两个问题:

  • 回文字符串长度奇偶对应的中心不同
  • 重复的计算

下面就来看看具体是怎么解决这两个问题的吧!

插入特殊字符

回文字符串可能出现abba, aba两种情况,对于abba其中心点bb,aba中心点为a,那么对于要求解的字符串,通过首尾及间隔插入特殊字符,就可以保证中心一定是1个字符, 同时回文长度均为扩展后的回文半径-1
为什么是扩展后的回文半径-1呢?
假设原回文半径为r
若回文长度为偶数, 则原回文长度为2r, 扩展后的半径为2r+1
若回文长度为奇数, 则原回文长度为2r-1, 扩展后的半径为2r。
很显然,原回文长度恰好是扩展后的半径-1
在这里插入图片描述

利用回文的对称性

在求解每个点的回文半径时,记录最右边界的回文,利用其对称性,减少当前点的计算

假设: 当前点为P, 最右回文边界为MR, 其中心点为C
根据P点的位置,可分为以下几种情况进行计算:

  • P>=MR : 与一般解法一致,以P为中心两侧扩散,求其回文半径,并更新最右边界
    在这里插入图片描述
  • P<MR, 此时可利用对称性减少计算,设其关于C的对称点为P’, P’的最左边界为P’L,则又分为三种情况:
    • P’的左边界在C左边界内, 即 P’L > 2C-MR, 则 r( P) = r(P’)
      在这里插入图片描述

    • P’的左边界在C左边界之外,即P’L < 2C-MR, 此时r( P) = MR-P , 这种情况下,在C的半径范围外P和P’ 的半径一定是不对称的,否则C的边界就不是MR了
      在这里插入图片描述

    • P’的左边界恰好落在C的左边界,即P’L = 2C-MR, 此时,P的回文半径至少是r(P’) 那么从MR开始往外扩散,随之最右边界更新
      在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值