题解——Leetcode 5. Longest Palindromic Substring 难度:Medium
2017-05-15 22:59
357 查看
Given a string s,
find the longest palindromic substring in s.
You may assume that the maximum length of s is
1000.
题目要求最长回文子串,用动态规划。
dp[j][i]表示从下标j到i之间的字符串是否是回文的。
j==i时,dp[j][i] = 1
i - j < 2时,s[j]与s[i]相邻,dp[j][j] = s[j] == s[i]
i - j >= 2时,dp[j][j] = (s[j] == s[i] && dp[j+1][i-1])
当找到一个回文子串时,记录其下标范围和长度,并更新最长回文子串长度len。
字符串遍历结束后,left即为最长回文子串的起始位置,len为子串长度,调用s.substr(left, len)就得到了最长回文子串。
class Solution {
public:
string longestPalindrome(string s) {
int dp[s.size()][s.size()] = {0};
int left = 0, right = 0, len = 1;
if(s.size() == 0 || s.size() == 1)
return s;
for(int i = 1; i < s.size(); i++){
for(int j = 0; j < i; j++){
dp[j][i] = (s[j] == s[i] && (i - j < 2 || dp[j+1][i-1]));
if(dp[j][i] && len < i - j + 1){
left = j;
right = i;
len = right - left + 1;
}
}
dp[i][i] = 1;
}
return s.substr(left, len);
}
};
find the longest palindromic substring in s.
You may assume that the maximum length of s is
1000.
题目要求最长回文子串,用动态规划。
dp[j][i]表示从下标j到i之间的字符串是否是回文的。
j==i时,dp[j][i] = 1
i - j < 2时,s[j]与s[i]相邻,dp[j][j] = s[j] == s[i]
i - j >= 2时,dp[j][j] = (s[j] == s[i] && dp[j+1][i-1])
当找到一个回文子串时,记录其下标范围和长度,并更新最长回文子串长度len。
字符串遍历结束后,left即为最长回文子串的起始位置,len为子串长度,调用s.substr(left, len)就得到了最长回文子串。
class Solution {
public:
string longestPalindrome(string s) {
int dp[s.size()][s.size()] = {0};
int left = 0, right = 0, len = 1;
if(s.size() == 0 || s.size() == 1)
return s;
for(int i = 1; i < s.size(); i++){
for(int j = 0; j < i; j++){
dp[j][i] = (s[j] == s[i] && (i - j < 2 || dp[j+1][i-1]));
if(dp[j][i] && len < i - j + 1){
left = j;
right = i;
len = right - left + 1;
}
}
dp[i][i] = 1;
}
return s.substr(left, len);
}
};
相关文章推荐
- 题解——Leetcode 11.Container With Most Water 难度:Medium
- 题解——Leetcode 529. Minesweeper 难度:Medium
- 题解——Leetcode 8. String to Integer (atoi) 难度:Medium
- 题解——Leetcode 442. Find All Duplicates in an Array 难度:Medium
- 题解——Leetcode 419. Battleships in a Board 难度:Medium
- LeetCode[127. Word Ladder] 题解 难度[medium]
- 题解——Leetcode 12. Integer to Roman 难度:Medium
- 题解——Leetcode 419. Battleships in a Board 难度:Medium
- 题解——Leetcode 16. 3Sum Closest 难度:Medium
- 题解——Leetcode 526. Beautiful Arrangement 难度:Medium
- 题解——Leetcode 18. 4Sum 难度:Medium
- 题解——Leetcode 2. Add Two Numbers 难度:Medium
- 题解——Leetcode 240. Search a 2D Matrix II 难度:Medium
- 题解——Leetcode 406. Queue Reconstruction by Height 难度:Medium
- 题解——Leetcode 241. Different Ways to Add Parentheses 难度:Medium
- 题解——Leetcode 6. ZigZag Conversion 难度:Medium
- LeetCode [416. Partition Equal Subset Sum] 难度[medium]
- 题解——Leetcode 312. Burst Balloons 难度:Hard
- [leetcode]题解+经验总结 自己做法+评论区mostvotes汇总 (只包含部分easy难度)
- LeetCode[392. Is Subsequence] 难度[medium]