最长回文子串 -- 三种解答
题目描述
给你一个字符串 s,找到 s 中最长的回文子串。
例子
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring,著作权归领扣网络所有。
思路以及解答
暴力破解
判断每一个字符是不是回文串,比如用 cbac
判断,左右两个指针,对称判断,相等则往中间移动,继续判断,不相等则直接返回 false 。
中心拓展法
回文串总是中心对称的,前面使用暴力法的时候,都是截取出子串之后再判断,只有判断到全部对称,才能证明回文,这样其实走了很多弯路,只要最后一个不对称,前功尽弃。
反过来想,我们不如在每一个点,都尝试往两边拓展,这样只要不匹配,就可以及时止顺。
值得注意的是,中心拓展法的中心怎么找?3个字符有多少个中心呢?
一共有五个中心,有些中心可能是两个字符的间隙,有些中心可能是字符。那么设计的时候,我们用 left
和 right
表示两个指针:
left = right
:对称中心为字符left + 1 = right
: 对称中心为两个字符的间隙
具体实现如下:
动态规划
其实,一个字符串是回文串的话,那么它倒过来读也是一样的,也就是说,它与它反转后的字符串,其实是完全匹配的,那么要是我们用一个字符串和它反转字符串一一统计匹配,是不是就可以得到结果呢?
答案是肯定的!假设原字符串为 s1
,反转后的字符串为 s2
,字符串长度为 n
,我们用数组 nums[n][n]
来记录匹配的数量,nums[i][j]
表示以 s1[i]
结尾的字符子串,和以 s2[j]
结尾的字符子串,两者的匹配字符的最大数值。
- 当
s1[i] == s2[j]
:- 如果
i == 0
或者j == 0
:nums[i][j] = 1
- 否则
nums[i][j] = nums[i - 1][j - 1] + 1;
- 如果
- 如果
s1[i] != s2[j]
,则nums[i][j]=0
前面说的其实就是状态转移表达式,也就是 nums[i][j]
是怎么求解的?nums[i][j]
是依赖于 nums[i - 1][j - 1]
和 当前字符是否匹配,如果当前字符不匹配,直接赋值为 0,只有在当前字符匹配的情况下,才会需要看前面一位的匹配数值 nums[i - 1][j - 1]
。
假设以 babad
为例子:
最后两行的计算:
实现的代码如下:
作者简介
【作者简介】:
秦怀,公众号【秦怀杂货店】作者,技术之路不在一时,山高水长,纵使缓慢,驰而不息。个人写作方向:Java源码解析
,JDBC
,Mybatis
,Spring
,redis
,分布式
,剑指Offer
,LeetCode
等,认真写好每一篇文章,不喜欢标题党,不喜欢花里胡哨,大多写系列文章,不能保证我写的都完全正确,但是我保证所写的均经过实践或者查找资料。遗漏或者错误之处,还望指正。
__EOF__

本文链接:https://www.cnblogs.com/Damaer/p/15383463.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库