LeetCode-5:Longest Palindromic Substring(最长回文子字符串)
描述:给一个字符串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/
LeetCode-5:Longest Palindromic Substring(最长回文子字符串)的更多相关文章
- Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)
Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法) Given a string s, find the longest pal ...
- [LeetCode] 5. Longest Palindromic Substring 最长回文子串
Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...
- [leetcode]5. Longest Palindromic Substring最长回文子串
Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...
- [LeetCode] 516. Longest Palindromic Subsequence 最长回文子序列
Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...
- 1. Longest Palindromic Substring ( 最长回文子串 )
要求: Given a string S, find the longest palindromic substring in S. (从字符串 S 中最长回文子字符串.) 何为回文字符串? A pa ...
- [LeetCode] Longest Palindromic Substring 最长回文串
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- 【LeetCode】5. Longest Palindromic Substring 最长回文子串
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:最长回文子串,题解,leetcode, 力扣,python ...
- LeetCode:Longest Palindromic Substring 最长回文子串
题目链接 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...
- 【翻译】Longest Palindromic Substring 最长回文子串
原文地址: http://articles.leetcode.com/2011/11/longest-palindromic-substring-part-i.html 转载请注明出处:http:// ...
随机推荐
- MFC开发小技巧总结
1.在类向导里面可以为对话框添加方法. 2.如要添加变量,直接右击添加变量即可. 3.若对某个控件添加方法或者称之为消息处理函数,直接右击添加事件处理程序即可.
- PyInstaller把.py转为.exe
http://www.pyinstaller.org/ http://blog.csdn.net/hmy1106/article/details/45151409 python pyinstaller ...
- java GC(Garbage Collector) | System.gc()
http://win.sy.blog.163.com/blog/static/94197186201151093543556/ Java垃圾回收调优
- prop()方法和attr()方法以及区别
prop()方法: prop() 方法设置或返回被选元素的属性和值. 当该方法用于返回属性值时,则返回第一个匹配元素的值. 当该方法用于设置属性值时,则为匹配元素集合设置一个或多个属性/值对. 注意: ...
- inflate, findViewById与setContentView的差别与联系
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV ...
- Android应用开发:网络工具——Volley(一)
引言 网络一直是我个人的盲点,前一阵子抽空学习了一下Volley网络工具的用法,也透过源代码进行了进一步的学习,有一些心得想分享出来.在Android开发中,成熟的网络工具不少,Android自带了H ...
- Chrome自带恐龙小游戏的源码研究(六)
在上一篇<Chrome自带恐龙小游戏的源码研究(五)>中实现了眨眼睛的恐龙,这一篇主要研究恐龙的跳跃. 恐龙的跳跃 游戏通过敲击键盘的Spacebar或者Up来实现恐龙的跳跃.先用一张图来 ...
- Gunicorn、Supervisor
简介 Gunicorn来源于Ruby的unicorn项目,是一个Python WSGI HTTP Server,通过pre-fork worker模型来管理和维护worker. 简而言之就是通过多进程 ...
- 统计分析表的存储过程遇ORA-00600错误分析与处理
1. 统计分析表的存储过程部分内容 CREATE OR REPLACE procedure SEA.sp_analyze_XXX_a is v_sql_1 varchar ...
- HDU 2473 Junk-Mail Filter(并查集的删除操作)
题目地址:pid=2473">HDU 2473 这题曾经碰到过,没做出来. .如今又做了做,还是没做出来. ... 这题涉及到并查集的删除操作.想到了设一个虚节点,可是我把虚节点设为了 ...