题目描述
给你一个字符串 s
,找到 s
中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母组成
解题方法
思路
dp[i][j]代表从s下标i~j最长的回文子串
dp数组中右上角是最终要求的结果,返回即可
代码
class Solution {
public:
string longestPalindrome(string s) {
vector<vector<string>> dp(s.size(), vector<string>(s.size(), ""));
for (int i = 0; i < s.size(); i++)
dp[i][i] = s[i];
for (int i = s.size() - 1; i >= 0; i--) {
for (int j = i + 1; j < s.size(); j++) {
if (s[i] == s[j]) {
string str = s[i] + dp[i + 1][j - 1] + s[j];
dp[i][j] = str;
} else {
if (dp[i][j - 1].size() > dp[i + 1][j].size()) {
dp[i][j] = dp[i][j - 1];
} else {
dp[i][j] = dp[i + 1][j];
}
}
}
}
return dp[0][s.size()-1];
}
};