5. Longest Palindromic Substring
来源:互联网 发布:linux解压缩zip 编辑:程序博客网 时间:2024/06/06 06:33
一开始n^2的写法,超时
class Solution {public: void init(string s,int& maxn,int &sta) { int n=s.size(); vector<vector<bool>> dp(n,vector<bool>(n)); int i,j; for(i=n-1;i>=0;i--) { dp[i][i]=1; for(j=i+1;j<n;j++) { if(s[i]!=s[j]) { dp[i][j]=0; continue; } if(j==i+1) dp[i][j]=1; else dp[i][j]=dp[i+1][j-1]; if(dp[i][j]==1&&maxn<j-i+1) { maxn=j-i+1; sta=i; } } } } string longestPalindrome(string s) { int n=s.size(); if(n==0) return s; int maxn=1; int i,j; int sta=0; init(s,maxn,sta); return s.substr(sta,maxn); }};
方法2:采用从中心向两边扩充,也是O(n^2)算法,竟然过了
class Solution {public: string GetP(string s,int left,int right) { int n=s.size(); while(left>=0&&right<n&&s[left]==s[right]) { left--; right++; } return s.substr(left+1,right-left-1); } string longestPalindrome(string s) { int n=s.size(); int i; string x,y; string tmp=s.substr(0,1); for(i=0;i<n-1;i++) { x=GetP(s,i,i); if(x.size()>tmp.size()) tmp=x; y=GetP(s,i,i+1); if(y.size()>tmp.size()) tmp=y; } return tmp ; }};
方法3:
使用mancher算法,复杂度是O(n),
class Solution {public: string longestPalindrome(string s) { int n=s.size(); int i; int mx=0; if(n==0) return s; string str="$"; for(i=0;i<n;i++) { str+="#"; str+=s[i]; } str+="#0"; int len=str.size(); int p[len]={0}; int id=0; int maxn=0,sta=0; for(i=1;i<len-1;i++) { if(mx>i) p[i]=min(mx-i,p[2*id-i]); else p[i]=1; while(str[i-p[i]]==str[i+p[i]]) p[i]++; if(p[i]+i>mx) { mx=i+p[i]; id=i; } if(maxn<p[i]-1) { maxn=p[i]-1; sta=i; } } string tmp=""; for(i=sta-p[sta]+1;i<sta+p[sta];i++) { if(str[i]!='#') tmp+=str[i]; } return tmp; }};
0 0
- 5.Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5.Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5.Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5.Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- Fibonacci进制
- POJ 2488A Knight's Journey(BFS水题)
- linux中的互斥途径
- JS中对集合与数组的操作
- 台州学院ACM:1748: Dungeon Master
- 5. Longest Palindromic Substring
- Android里WebView详解(二)
- 机器学习中用到的数学知识
- ural 1982. Electrification Plan 【最小生成树】
- TimePicker、TimePickerDialog的使用
- Java 学习笔记(0x08) super关键字
- linux 学习笔记-01
- CCF-201503-3-节日
- 最多约数问题