LeetCode [Day 5] Longest Palindromic Substring 题解
2014-04-24 00:00
991 查看
Longest Palindromic Substring
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.
思路
最长回文子串问题可以用DP的想法去解决。用一个二维数组dp[len][len]去记录是否存在这样的一个回文子串。
dp[i][j]表示从S[i]到S[j]的子串是否是一个回文字符串。根据回文串的定义,可以非常轻松地写出每一步的动态转移方程:
dp[i][i] = 1;
dp[i][i+1] = s[i]==s[i+1];
dp[i][j] = dp[i+1][j-1] && (s[i]==s[j]);
根据转移方程,可以确定for循环语句的执行次序,i递减,j递增。同时,只要维护最长回文子串的起始字符和终止字符的位置即可。整个算法的复杂度是O(n^2)。
代码
需要注意的是,动态数组放在public里面定义,会出现MLE的情况,所以应该定义在外面,反正S的长度不会超过1000。
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.
思路
最长回文子串问题可以用DP的想法去解决。用一个二维数组dp[len][len]去记录是否存在这样的一个回文子串。
dp[i][j]表示从S[i]到S[j]的子串是否是一个回文字符串。根据回文串的定义,可以非常轻松地写出每一步的动态转移方程:
dp[i][i] = 1;
dp[i][i+1] = s[i]==s[i+1];
dp[i][j] = dp[i+1][j-1] && (s[i]==s[j]);
根据转移方程,可以确定for循环语句的执行次序,i递减,j递增。同时,只要维护最长回文子串的起始字符和终止字符的位置即可。整个算法的复杂度是O(n^2)。
代码
需要注意的是,动态数组放在public里面定义,会出现MLE的情况,所以应该定义在外面,反正S的长度不会超过1000。
int dp[1001][1001] = {0}; // MLE class Solution { public: string longestPalindrome(string s) { int ret = 1; int low = 0, high = 0; int len = s.length(); //int **dp = new int*[len]; //for (int i=0; i<len; ++i) dp[i] = new int[l 7fe0 en]; for (int i=0; i<len; ++i) for (int j=0; j<len; ++j) dp[i][j] = 0; for (int i=0; i<len; ++i) dp[i][i] = 1; for (int i=0; i<len-1; ++i) { dp[i][i+1] = (s[i]==s[i+1]); ret = (s[i]==s[i+1]||ret==2)?2:1; if (s[i]==s[i+1]) { low = i; high = i+1; } } for (int i=len-2; i>=0; --i) { for (int j=i+2; j<=len-1; ++j) { dp[i][j] = dp[i+1][j-1] && (s[i]==s[j]); if (dp[i][j]&&(ret<j-i+1)) { ret = j-i+1; low = i; high = j; } } } return s.substr(low,ret); // string.substr(start, length) } };
相关文章推荐
- LeetCode题解(Golang实现)--Longest Palindromic Substring
- [LeetCode]题解(python):005-Longest Palindromic Substring
- LeetCode(3)题解: Longest Palindromic Substring
- leetcode题解-647. Palindromic Substrings && 5. Longest Palindromic Substring
- LeetCode题解——Longest Palindromic Substring
- LeetCode - Longest Palindromic Substring 题解
- LeetCode题解:Longest Palindromic Substring
- 5. Longest Palindromic Substring LeetCode题解
- Leetcode题解-5. Longest Palindromic Substring
- LeetCode题解-5-Longest Palindromic Substring
- LeetCode题解 #5 Longest Palindromic Substring
- LeetCode题解:Longest Palindromic Substring
- LeetCode题解——Longest Palindromic Substring
- [LeetCode]Longest Substring Without Repeating Characters题解
- [LeetCode] Longest Palindromic Substring
- [Leetcode] #5 Longest Palindromic Substring
- Leetcode 5. Longest Palindromic Substring(java版)
- [leetcode] Longest Palindromic Substring
- LeetCode(5)--Longest Palindromic Substring
- 【Leetcode】 Longest Palindromic Substring