最长回文子串----Manacher(谐称"马拉车")算法详解

本文介绍了Manacher算法,用于解决寻找字符串中最长回文子串的问题。算法通过记录回文串的右边界、中心和长度,利用回文特性降低时间复杂度至O(n)。文章还讨论了如何处理回文串长度为偶数的情况,并给出了预处理字符串的方法。
摘要由CSDN通过智能技术生成

问题:

         给定一个字符串s,找到s中最长的回文子字符串。

         所谓回文字符串,指的是无论从左往右读还是从右往左读,结果都是一样的,也叫做对称字符串。

比如 “google” 的最长回文子串为 “goog”。

 

问题分析

        求解回文串的一般方法是首尾比较,以中点为界限,如果一直到中点首尾对应的字符都相等,则该字符串为回文串

例:设str="abccba",从i=0开始,str[0]==str[5],str[1]==str[4],str[2]==strs[3],i=2时到达中点,此前,首尾对应的字符都相等,所以该字符串为回文串。

        要想求一个字符串的最长回文字串,则需依次判断该字符串的所有字串,这样的算法时间复杂度为O(n^3),显然这样的算法并不好,本文介绍的算法可以将时间复杂度降为O(n),这大大降低了时间复杂度。算法的性能大大提升。

 

算法分析

        这里用一个例子来说明算法的过程。如 cabadabae,我已经知道了第三位为中心的aba和第5位为中心的abadaba是回文,

那么由回文的特性&#

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值