博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode-5:Longest Palindromic Substring(最长回文子字符串)
阅读量:5911 次
发布时间:2019-06-19

本文共 1054 字,大约阅读时间需要 3 分钟。

描述:给一个字符串s,查找它的最长的回文子串。s的长度不超过1000。

Input: "babad"Output: "bab"Note: "aba" is also a valid answer.     我是采用动态规划解决此题的。官方的solutions中提供了几种思路,包括我使用的DP。这里摘要如下: 思路1:     将s反转得到s',然后查找s和s'的最长公共子串substring,那么substring就是最长回文子串。 比如:s = "caba", s' = "abac" => substring = "aba" 但是存在特殊的情况如:     s = "abacdfgdcaba", s' = "abacdgfdcaba" => substring = "abacd"     可以看到substring并不是回文,这是因为s中存在子串s1和s2,而reverse(s1)=s2,但是s1本身并不是回文。     对这种情况,可以对比Index,检测反转后的substring是不是由反转前的substring得来。     至于查找s1和s2的最长公共子串,更优秀的方法可以参见:https://en.wikipedia.org/wiki/Longest_common_substring_problem 思路2:     直接暴力检索所有字符串是否回文,略过。 思路3(DP):     定义P(i,j)表示在s中索引i~j的字串是否为回文。则有:     P(i,j) = (P(i+1,j-1) and s[i] == s[j]),即当且仅当字符s[i] == s[j]且子串s(i+1,j-1)是回文时,s(i,j)是回文;     基础情形:         P(i,i) = true         P(i,i+1) = s[i] == s[i+1] 思路4:     任何一个回文子串都是由一个分隔点不断向两侧扩展相同字符得来的,因此只需要以每个字符或字符间隔点起始向两侧尽可能扩展,筛选最长的子串即可。此思路看起来似乎不怎么样,但是其时间复杂度也只有O(n的平方),而空间复杂度只有O(1)。 思路5:     详细见:https://articles.leetcode.com/longest-palindromic-substring-part-ii/

转载于:https://www.cnblogs.com/Jackie-Snow/p/9524989.html

你可能感兴趣的文章
反思总结然后整装待发
查看>>
当SetTimeout遇到了字符串
查看>>
服务器之间,相同帐号,实现免密钥登录
查看>>
MYSQL 的 IF 函数
查看>>
[nginx文档翻译系列] 控制nginx
查看>>
将 Measurements 和 Units 应用到物理学
查看>>
一道闭包题引发的思考
查看>>
人群估值一般性算法
查看>>
HTML/CSS 知识点
查看>>
如何优雅地关闭Go channel
查看>>
免费学习coursera的课程的操作办法
查看>>
SAE的Tornado开发经验
查看>>
一步一步给你的 Android app 加入聊天功能
查看>>
PhpStorm 2018.2.7 和 2018.3.6 发布
查看>>
菜鸟要投120亿港币,在香港建超级eHub
查看>>
30亿元收购比特币公司 鲁亿通称不是炒概念
查看>>
实现Chrome Devtools调试JavaScript V8引擎
查看>>
IDEA安装Go,创建Go项目
查看>>
Promise 使用技巧九则
查看>>
泛型就这么简单
查看>>