manacher 算法

算法简介

manacher 算法是一个求字符串中最长回文连续子序列的算法,可以达到 O(n) 的复杂度。

算法

我们可以在每一个字符之间补上一个 ‘#’ 这样所有的回文串就都会变成长度为奇数的回文串,我们用 leni 表示从 i 点能够扩展出的回文长度(包括自身)最长是多少,maxright 表示已经触及到的最右边的字符,mid 表示 maxright 所对应的对称轴。

如图:

然后我们发现,leni​ 的值至少是 min(lenj,maxrighti+1)​​ 。然后我们就可以从这个位置开始扩展,直到不能扩展。

复杂度证明

因为 maxright 是单调不减的,所以 while 语句均摊下来仍然是 O(n)

posted @   NuclearReactor  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
主题色彩