Longest Palindromic Substring
来源:互联网 发布:中国木制品数据 编辑:程序博客网 时间:2024/06/07 06:48
题目:Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
思路:
第一个思路是动态规划,和之前的求子回文串思路一样,不再赘述,这里的一个窍门的就是每次判断之后,就能够输出最小值,以及长度。最后substr一下,直接输出字符。但每次需要判断,找出longest长度。
第二个思路是从中心拓展,但记住,总时间是2*n-1,因为需要考虑到偶字符串的。然后每次能够输出两个字符串,对比下即可。
代码:
class Solution1 {public://在之前有一个题目使用自下而上的解法//http://articles.leetcode.com/2011/11/longest-palindromic-substring-part-i.html//这只是第一种想法,还有一种待会写。 string longestPalindrome(string s){ int n=s.length(); int longestBegin=0; int maxLen=1; bool table[1000][1000]={false};// s[i....j] for(int i=0;i<n;i++){ table[i][i]=true;//单个字符绝对可以成为回文串 longestBegin=i; maxLen=1; } //table的初始化 for(int i=0;i<=n-2;i++){ if(s[i]==s[i+1]){//看有没有相隔2个字符可以成为回文串的 table[i][i+1]=true; longestBegin=i; maxLen=2; } } //接下来查看间隔是3的情形 for(int len=3;len<=n;len++){ for(int i=0;i<=n-len;i++){ int j=len+i-1; if(s[i]==s[j]&&table[i+1][j-1]){ table[i][j]=true; longestBegin=i; maxLen=len; } } } return s.substr(longestBegin,maxLen); }};class Solution2 {public://第二种写法,从中心拓展 string longestPalindrome(string s){ int n=s.length(); if(n==0){ return ""; } string longest=s.substr(0,1); for(int i=0;i<n;i++){ string p1=expandAroundCenter( s,i,i);//围绕中心i使劲往两边走 if(p1.length()>=longest.length()){ longest=p1; } string p2=expandAroundCenter( s,i,i+1);//围绕中心i使劲往两边走 if(p2.length()>=longest.length()){ longest=p2; } } return longest; } string expandAroundCenter(string &s,int c1,int c2){ int len=s.length(); while(c1>=0&&c2<=len-1&&s[c1]==s[c2]){ c1--;c2++; } return s.substr(c1+1,c2-c1-1);//第一个参数是起始位置,第二个是长度,闭区间 }};
0 0
- LeetCode: Longest Palindromic Substring
- LeetCode Longest Palindromic Substring
- LeetCode: Longest Palindromic Substring
- [Leetcode] Longest Palindromic Substring
- Longest Palindromic substring
- [LeetCode] Longest Palindromic Substring
- LeetCode5:Longest Palindromic Substring
- Leetcode : Longest Palindromic Substring
- Longest Palindromic Substring
- Longest Palindromic Substring
- [LeetCode]Longest Palindromic Substring
- leetcode Longest Palindromic Substring
- Longest Palindromic Substring
- LeetCode-Longest Palindromic Substring
- Longest Palindromic Substring
- Longest Palindromic Substring
- [LeetCode] Longest Palindromic Substring
- Longest Palindromic Substring leetcode
- Cookie深度解析
- fs4412开发板学习笔记(八)
- NSOperation的介绍
- 文件读写
- 【建议112--笔记】受检异常和非受检异常
- Longest Palindromic Substring
- 批量修改文件后缀名
- C语言swap函数总结
- 两台电脑怎么共享文件
- [Leetcode]Gas Station
- 重新学习COCOs2D-X版本2.2.3开始---第一篇引擎的游戏入口
- POJ 1089 解题报告
- printf( )的格式字符
- NSDate NSString NSArray NSDictionary 数据类型相互转换