[*leetcode 5] Longest Palindromic Substring
2015-01-06 22:21
323 查看
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.
[Solution]
求最长回文子串,假设我们已知S[i...j]是回文子串,那么,若S[i-1] = S[j+1],则S[i-1,...,j+1]是回文子串。
1、双指针法
用middle顺序指向S中的字符,如果S[left] == S[right], 那么left和right分别向两边扩展。
2、动态规划
用table[i][j]的true/false表示S[i,...,j]是否为回文子串,
可以得到递推公式:table[i][j] = table[i+1][j-1] && (S[i] == S[j]) (i+1 <= j-1, 即 i+2 <= j)
初始条件:
当j = i 时,table[i][j] = true;
当j = i + 1时,table[i][j] = (S[i] == S[j])
[Solution]
求最长回文子串,假设我们已知S[i...j]是回文子串,那么,若S[i-1] = S[j+1],则S[i-1,...,j+1]是回文子串。
1、双指针法
用middle顺序指向S中的字符,如果S[left] == S[right], 那么left和right分别向两边扩展。
string longestPalindrome(string s) { int left = 0, right = 0, middle = 0, slen = s.size(); string result = ""; while (middle < slen) { left = right = middle; while ((left > 0) && (s[left - 1] == s[middle])) left--; while ((right < slen - 1) && (s[right + 1] == s[middle])) right++; while ((left > 0) && (right < slen - 1) && (s[left - 1] == s[right + 1])) left--, right++; if (result.size() < (right - left + 1)) result = s.substr(left, right - left + 1); middle++; } return result; }
2、动态规划
用table[i][j]的true/false表示S[i,...,j]是否为回文子串,
可以得到递推公式:table[i][j] = table[i+1][j-1] && (S[i] == S[j]) (i+1 <= j-1, 即 i+2 <= j)
初始条件:
当j = i 时,table[i][j] = true;
当j = i + 1时,table[i][j] = (S[i] == S[j])
string longestPalindrome(string s) { bool table[1000][1000] = {false}; int i, j, slen = s.length(), start = 0, maxlen = 1; for (i = 0; i < slen; i++) table[i][i] = true; for (i = 0; i < slen - 1; i++) { j = i + 1; if (s[i] == s[j]) { table[i][j] = true; start = i; maxlen = 2; } } for (int len = 3; len <= slen; len++) { for (i = 0; i < slen - len + 1; i++) { j = i + len - 1; if (s[i] == s[j] && table[i + 1][j - 1]) { table[i][j] = true; start = i; maxlen = len; } } } return s.substr(start, maxlen); }
相关文章推荐
- LeetCode 5. Longest Palindromic Substring(最长回文连续子串)
- leetcode 005 —— Longest Palindromic Substring
- leetcode[5]Longest Palindromic Substring
- 【LeetCode】Longest Palindromic Substring
- [Leetcode] Longest Palindromic Substring
- [Leetcode]_5 Longest Palindromic Substring
- Longest Palindromic Substring - LeetCode
- LeetCode 5. Longest Palindromic Substring
- Leetcode--Longest Palindromic Substring(最长回文子序列)
- Java [leetcode 5] Longest Palindromic Substring
- leetcode 73: Longest Palindromic Substring
- LeetCode Longest Palindromic Substring
- leetcode 5: Longest Palindromic Substring
- leetcode Longest Palindromic Substring
- leetcode05- Longest Palindromic Substring之Java版本
- Leetcode-Longest Palindromic Substring
- LeetCode(5) Longest Palindromic Substring
- leetcode - Longest Palindromic Substring
- LeetCode-5-Longest Palindromic Substring 最长回文子串DP
- leetcode: Longest Palindromic Substring