Leetcode 5. Longest Palindromic Substring
来源:互联网 发布:win32界面编程 编辑:程序博客网 时间:2024/05/19 04:04
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.
这里给出两个效率较高的方法:
方法1:动态规划法 O(n2)
class Solution {public: string longestPalindrome(string s) { int maxbeg=0,maxlen=0; if(s.size()==0||s.size()==1) return s; bool flag[1000][1000]={false}; for(int i=0;i<1000;i++) flag[i][i]=true; for(int i=0;i<s.size()-1;i++){ if(s[i]==s[i+1]){ flag[i][i+1]=flag; maxbeg=i; maxlen=2; } } for(int len=3;len<=s.size();len++){ for(int i=0;i+len-1<s.size();i++){ int beg=i,end=i+len-1; if(s[beg]==s[end]&&flag[beg+1][end-1]){ flag[beg][end]=true; maxbeg=beg; maxlen=len; } } } return s.substr(maxbeg,maxlen); }};
方法2:Manacher算法 O(n),核心思想利用回文的对称性求解回文串的半径。实现要对原串进行改造
class Solution {public: string longestPalindrome(string s) { string str; str+='$'; for(int i=0;i<s.size();i++) str=str+'#'+s[i]; str+='#'; int mid=0,mx=0,maxi=1; int p[str.size()]; for(int i=1;i<str.size();i++){ if(mx>=i) p[i]=min(p[2*mid-i],mx-i+1); else p[i]=1; int beg=i-p[i],end=i+p[i]; while(str[beg]==str[end]){ p[i]++; beg--; end++; } if(p[i]+i-1>mx){ mx=p[i]+i-1; mid=i; } maxi=p[i]>p[maxi]?i:maxi; } return s.substr((maxi-p[maxi]+1)/2,p[maxi]-1); }};
Manacher算法 具体讲解请看:http://www.cnblogs.com/bitzhuwei/p/Longest-Palindromic-Substring-Part-II.html
0 0
- LeetCode 5. Longest Palindromic Substring
- LeetCode --- 5. Longest Palindromic Substring
- LeetCode 5.Longest Palindromic Substring
- [Leetcode] 5. Longest Palindromic Substring
- [LeetCode]5.Longest Palindromic Substring
- [leetcode] 5. Longest Palindromic Substring
- LeetCode-5. Longest Palindromic Substring
- leetcode 5. Longest Palindromic Substring
- leetcode 5. Longest Palindromic Substring
- Leetcode 5. Longest Palindromic Substring
- LeetCode 5. Longest Palindromic Substring
- Leetcode 5. Longest Palindromic Substring
- leetcode 5. Longest Palindromic Substring
- LeetCode-5. Longest Palindromic Substring
- Leetcode 5. Longest Palindromic Substring
- leetcode 5. Longest Palindromic Substring
- LeetCode *** 5. Longest Palindromic Substring
- 【leetcode】5. Longest Palindromic Substring
- junit 加Jmockit单元测试
- ORA-01791: 不是 SELECTed 表达式
- Linux yum 安装 Error: Protected multilib versions
- jquery插件实现文件上传
- 小知识点总结
- Leetcode 5. Longest Palindromic Substring
- 聚类分析
- C++primer第15章习题解答
- 《Django By Example》读书笔记 01
- Android 手把手教您自定义ViewGroup(一)
- 《Spring实战》学习笔记-第五章:构建Spring web应用
- js冒泡排序、数组去重、小数点处理等常见函数
- 在MATLAB和Opencv中HSV空间显示不同的问题
- Eclipse下调试安卓程序