LeetCode 5. Longest Palindromic Substring
2016-05-16 22:33
351 查看
#include <iostream> #include <vector> using namespace std; /* 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. */ int longestPalindromeSubstring(string s) { if(s.size() <= 1) return s.size(); int n = s.size(); vector< vector<bool> > P(n, vector<bool>(n, false)); for(int i = 0; i < n; ++i) { P[i][i] = true; } int maxLen = 1; for(int L = 2; L <= n; ++L) { for(int start = 0; start < n - L + 1; ++start) { int end = start + L - 1; if(L == 2) P[start][end] = (s[start] == s[end]); else P[start][end] = ((s[start] == s[end]) && P[start + 1][end - 1]); } } for(int i = 0; i < n; ++i) { for(int j = i+1; j < n; ++j) { if(P[i][j]) maxLen = max(maxLen, abs(j - i + 1)); } } return maxLen; } int main(void) { int maxLen = longestPalindromeSubstring("accbaaaabc"); cout << maxLen << endl; }
Second Round: two pointers, one goes left, one goes right.
#include <string> #include <iostream> using namespace std; string maxPalindrome(string str) { if(str.size() <= 1) return str; int a = 0, b = 0, size = str.size(); int mark = 0; int maxLen = 1; for(int i = 0; i < size && (2 * (size - i) > maxLen);) { a = b = i; for(; b + 1 < size && (str[b] == str[b+1]); ++b); // remove duplicates i = b + 1; for(; a > 0 && b + 1 < size && (str[a-1] == str[b+1]); --a, ++b) { // two pointers, one goes left, one goes right. ; } if(b - a + 1 > maxLen) { maxLen = b - a + 1; mark = a; } } return str.substr(mark, maxLen); } int main(void) { cout << maxPalindrome("baaaaabb") << endl; }
相关文章推荐
- Hibernate的三种状态
- LCA(最近公共祖先)--tarjan离线算法 hdu 2586
- 第二次画板
- android html5 的弹出窗设置
- [C++Primer] 第二章 变量和基本类型
- 动态内容爬虫
- 如何才能做到网站高并发访问?
- linux下c程序访问mysql实例
- 基于S2SH开发必须的jar说明
- Android Studio中使用开源库volley进行网络访问简单示例
- Reachability框架(联网状态的检测)
- python Image模块学习
- 双栈队列
- 内部类简要分析
- .NET DateTime类型变量作为参数时设置默认值
- 设计模式总纲
- eclipse安装JAVA反编译插件
- UI基础_UIActivityIndicatorView的使用
- 如何创建第一个React Native android应用
- Ural——1297Palindrome(Manacher)