leetcode 5.最长回文子串

本文探讨了最长回文子串问题的多种解决方法,包括暴力搜索、中间向两边扩展及一种类似KMP的高效算法,后者将时间复杂度降至O(n)。通过对比不同算法,文章详细介绍了如何利用对称性质快速确定回文串边界,实现算法优化。

这个老生常谈了,最长回文子串嘛,不难。

它这个是要输出来,注意他这个不只一个正确答案,但是可以随便写出一个就成,用遍历的方法,它肯定会遍历吧?

用暴力的方法,是一个三重循环,算了,这么做没用的。

自己想,也想不出什么好方法来。查了网上,用中间向两边推进,的确是一个好方法。时间仅是O2.

实际上,还有一个特别好的算法,它是跟KMP算法是一个地位的,比较复杂,但是值得学习,它把时间降低到On,苍天啊,就这么一个算法,就能让一个人出名,人家花几个月甚至几年研究出的算法,我随便想想就想得出?不可能!因此,算法,还是以学为重点,实际上,世界上动脑子的事情很少,基本上前人已经把所有情况都研究透了,思而不学则殆了。编写一个毫无营养的算法有什么用呢?白白浪费时间罢了。

这个算法要么就在扩展右边界,要么就直接得出结论,所以算法时间可以到O(n)

最后总结:做题随便想想就成,你永远也干不过网上的最优解,并且解就那么几个,随便想想后看网上解法就行了。另外一件事就是,看懂代码就行,如果照抄,非常容易引起查重率的问题,建议看懂后自己编写。

问题1:如果第3位和第五位的字母是一样的呢?那么第四位至少是3回文了,那么几乎都是一样的字母了,当然是在奇数效果下先。

这个算法的关键在于两核心,我们可以设为左核心和中核心,右核心就是我们现在正在检测的单元,一开始是要定义中核心的,中核心的判断标准是它的右界是所有回文串中最右的,或者说是能检测到的字符的最右端,这么一个中核心,左核心是右核心关于中核心的对称,是在遍历过程中产生的,它的作用是快速给右核心,也就是我们正在检测的单元赋边界范围,为什么呢?因为右核心与左核心是关于中核心对称的,为什么会对称呢?因为首先说,它是在右边界之内的,才算数,既然右核心都在右边界之内了,那么左核心自然也在左边界范围之内,自然的,左核心与右核心的周边也会相等,那么能相等多少呢?就是左核心的对称长度与右边界之间取一个最小值,就是右核心的回文长度了。然后再做什么呢?就是以右核心为重点,拓宽右边界的长度,就是向未知领域迈进了。

如果,右核心没有在右边界之内呢?这怎么说呢?右边界是while循环中的产物,而右核心是for循环的产物,二者并没有什么联系,但有一点可以肯定的是,一般右核心是小于右边界的,因为在拓宽右边界的时候,是以右核心为中心,也就是说,最后会把右核心设置成中核心,最差的情况,就是这里一个右核心,我探测了一下,下一个不构成对称,然后呢,右核心被设置成中核心了,对称长度为0,紧接着处理下一个,也就是说,右核心大于右边界是可能存在的,而且最多差1个单位而已。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值