题目描述
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
C++代码
class Solution {
public:
string longestPalindrome(string s) {
int n = s.length();
vector<vector<bool>> dp(n, vector<bool>(n));
int x=0,y=0;
for (int i = n - 1; i >= 0 ; i--){
for (int j = i; j < n; j++){
dp[i][j] = (s[i]==s[j]) && (j - i <= 2 || dp[i+1][j-1]);
if (dp[i][j] && j - i > y - x){
x=i;
y=j;
}
}
}
return s.substr(x, y -x +1);
}
};
题目思路
一个二维数组dp来表示字符串从i到j的子串是否是一个回文字符串。
一个从i到j的子串是否是回文串dp[i][j] = (s[i] == s[j]) && (j - i <= 2 || dp[i+1][j-1])