5. Longest Palindromic Substring
来源:互联网 发布:示范性软件学院排名 编辑:程序博客网 时间:2024/06/06 12:59
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.
思路:暴力穷举的话,判断任意两个index之间的subString是不是回文,有C(n,2)种substring, 对于每个substring判断是不是回文,需要O(n)的时间复杂度,所以一共是O(n^3)的时间复杂度。
一种简单的解法是:可以避免一些重复计算,比如已经知道s[i+1][j-1]是回文串了,如果s[i]==s[j],则可以知道s[i][j]也是回文串。可以用DP来解,分下面三种情况来逐步计算:
1) 自己和自己肯定是回文,所以最小的回文串长度是1;
2) 对于回文串是偶数的情况,判断相邻的两个是否是回文,如果存在的话,回文串最小长度是2;
3)对于回文串如果长度>2的情况,就可以用判断ij中间的子串是否为回文以及s[i][j]是否相等来判断。
DP就是创建一些初始已知的状态,后面的状态可以根据前面的状态进行判断。
http://articles.leetcode.com/longest-palindromic-substring-part-i
DP的话是O(n^2)的时间复杂度和O(n^2)的空间复杂度,还有O(1)空间复杂度的解法, 以后有时间在看吧。
class Solution {public: string longestPalindrome(string s) { int n = s.size(); int start = 0; bool status[1000][1000] = {false}; int maxLen = 1; //at least is 1 // len = 1 for(int i = 0; i < n; i++) { status[i][i] = true; } // len = 2 for(int i = 0; i < n -1; i++) { if(s[i] == s[i+1]) { status[i][i+1] = true; maxLen = 2; start = i; } } // len>=3 for(int len = 3; len <= n; len++) { for(int i = 0; i < n - len + 1; i++) { int j = i + len -1; if(s[i] == s[j] && status[i+1][j-1]) { status[i][j] = true; maxLen = len; start = i; } } } return s.substr(start, maxLen); }};
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
- codeforces357(div2)C
- hdu2196Computer树的直径
- PHP继承父类
- 彻底解决Webpack打包慢的问题
- nodejs+express4.X的文件下载
- 5. Longest Palindromic Substring
- SSH注解方式
- ActiveMQ5官方文档翻译
- Android EditText的小知识
- java:自动搜索不同位置的properties文件并加载
- 常用名词解释
- 全排列
- hdoj5791two【dp】
- android studio下.gitignore文件配置