给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
示例 1:
输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd" 输出: "bb"
class Solution {
public:
string longestPalindrome(string s) {
if(s.empty()){
return "";
}
int len = s.size();
if(len==1){
return s;
}
vector<vector<int>> dp(len,vector<int>(len));
int longest = 1;
int start = 0;
for(int i=0;i<len;i++){
dp[i][i] = 1;
if(i<len-1){
if(s[i]==s[i+1]){
dp[i][i+1] = 1;
longest = 2;
start = i;
}
}
}
for(int l = 3; l <= len; l++){
for(int i = 0; (i+l-1) < len; i++){
int j = i+l-1;
if(s[i] == s[j] && dp[i+1][j-1]){
dp[i][j] = 1;
start = i;
longest = l;
}
}
}
return s.substr(start,longest);
}
};