给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。(要求用动态规划法实现) 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 输入:s = "cbbd"输出:"bb"
时间: 2023-04-09 19:00:37 浏览: 120
如何输出字符串的最长回文子串
可以回答这个问题。使用动态规划法解决最长回文子串问题,可以定义一个二维数组 dp,其中 dp[i][j] 表示字符串 s 中从 i 到 j 的子串是否为回文子串。当 i=j 时,dp[i][j] 为 true;当 j-i=1 时,如果 s[i]=s[j],则 dp[i][j] 为 true;当 j-i>1 时,如果 s[i]=s[j] 且 dp[i+1][j-1] 为 true,则 dp[i][j] 为 true。在遍历 dp 数组时,记录最长的回文子串的起始位置和长度即可。
具体实现可以参考以下代码:
class Solution {
public:
string longestPalindrome(string s) {
int n = s.size();
vector<vector<bool>> dp(n, vector<bool>(n, false));
int start = 0, maxLen = 1;
for (int i = 0; i < n; i++) {
dp[i][i] = true;
for (int j = 0; j < i; j++) {
if (s[i] == s[j] && (i - j <= 1 || dp[j+1][i-1])) {
dp[j][i] = true;
if (i - j + 1 > maxLen) {
maxLen = i - j + 1;
start = j;
}
}
}
}
return s.substr(start, maxLen);
}
};
阅读全文