【剑指offer专项】20. 回文子字符串的个数(manacher算法)

manacher算法

在这里插入图片描述
原串回文串终点的求法:
在这里插入图片描述
原串回文串的长度为 M L C [ P O S ( a f t e r ) ] MLC[POS(after)] MLC[POS(after)]

原理可参考 https://zhuanlan.zhihu.com/p/70532099,但是他的回文半径和这里的描述相差1,整体逻辑是一样的都是正确的,描述方法不一样而已。

然后还有提一个关于leetcode上初始化 f ( i ) f(i) f(i)的理解模型:
在这里插入图片描述

manacher实现的一个重要过程:
就是不用每次都通过拓展的方式(像双指针那样)去找f(i)。而是通过前面已知的f(i)=f(j)或者(f(i)=rmax-i+1)初始化,当求得得f(i)不是最大时,再拓展,这样就节省了拓展得时间。
当求出的 i 的右边界r大于当前的 r m a x r_{max} rmax时,我们就需要更新 im和 r m a x r_{max} rmax 为当前的回文串了。因为我们必须保证 i 在 r m a x r_{max} rmax 里面,所以一旦有更右边的 r就要更新 r m a x r_{max} rmax

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值