Description:
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example:
Input: "babad" Output: "bab" Note: "aba" is also a valid answer.
Example:
Input: "cbbd" Output: "bb"
Solution:
class Solution {
public:
string longestPalindrome(string s) {
int n = s.size();
// dp[i][j] == true 表示从从索引i到索引j的子串可构成回文
bool dp[n][n];
fill_n(&dp[0][0], n*n, false);
int max_len = 1;
int start = 0;
for(int i = 0; i < s.size(); ++i) {
for(int j = 0; j <= i; ++j) {
if(i-j < 2)
// 子串仅包含一个字母即(j==i)时可构成回文,仅包含两个字母时若两个字母相同,可构成回文,反之不能
dp[j][i] = (s[i]==s[j]);
else
// 子串包含超过三个字母,要使从下标 j 到 i 能构成回文,需要同时满足两个条件
// 1. s[i] == s[j] 即子串两端是同一个字母
// 2. dp[j+1][i-1] 即子串的中间(两边收缩)也能构成回文,此处体现动态规划思想
dp[j][i] = (s[i] == s[j] && dp[j+1][i-1]);
if(dp[j][i] && max_len < (i-j+1)) {
max_len = i-j+1;
start = j;
}
}
}
return s.substr(start, max_len);
}
};
解法参考自:https://blog.csdn.net/shineboyxxb/article/details/52079360