给你一个字符串 s
,找到 s
中最长的回文子串
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母组成
思路
动态规划
参考647. 回文子串-CSDN博客这篇文章,在判断是否是一个子串的时候,统计长度与索引下标
class Solution {
public:
string longestPalindrome(string s) {
vector<vector<bool>> dp(s.size(), vector<bool>(s.size(), false));
int result = 0, maxl = 0;
for (int i = s.size() - 1; i >= 0; i--) { // 注意遍历顺序
for (int j = i; j < s.size(); j++) {
if (s[i] == s[j]) {
if (j - i <= 1) { // 情况一 和 情况二
if (result < (j - i + 1))
{
result = j - i + 1;
maxl = i;
}
dp[i][j] = true;
}
else if (dp[i + 1][j - 1]) { // 情况三
if (result < (j - i + 1))
{
result = j - i + 1;
maxl = i;
}
dp[i][j] = true;
}
}
}
}
return s.substr(maxl, result);
}
};