
代码 :
// 中心拓展class Solution {public:string longestPalindrome(string s) {int res = INT_MIN;string ans = "";for(int i = 0; i < s.size(); i ++){// oddfor(int l = i, r = i; l >=0 && r < s.size(); l--, r++) {if(s[l] == s[r]) {res = max(res, r - l + 1);if(res == r - l + 1)ans = s.substr(l, r - l + 1);}else break;}// evenfor(int l = i, r = i + 1; l >= 0 && r < s.size(); l--, r++) {if(s[l] == s[r]) {res = max(res, r - l + 1);if(res == r - l + 1)ans = s.substr(l, r - l + 1);}else break;}}return ans;}};
// 动态规划
class Solution {
public:
string longestPalindrome(string s) {
int n = s.size();
vector<vector<bool>> dp(n, vector<bool>(n, false));
int res = INT_MIN;
string ans = "";
for(int r = 0; r < s.size(); r ++) {
for(int l = 0; l <= r; l ++) {
if(l == r) dp[l][r] = true;
else if (s[l] == s[r]) {
if(r - l + 1 == 2) dp[l][r] = true;
else if (dp[l+1][r-1]) dp[l][r] = true;
}
if(dp[l][r]){
res = max (res, r - l + 1);
if(res == r - l + 1) {
ans = s.substr(l, r - l + 1);
}
}
}
}
return ans;
}
};
