class Solution {
public:
string longestPalindrome(string s) {
bool dp[1001][1001];
//初始化
memset(dp , false, sizeof(dp));
int len = s.length();
//最大长度
int maxLen = 1;
//起始点
int indexFrom = 0;
for(int j=1;j<len;j++) {
for(int i=0;i<j;i++) {
if(s[j] == s[i]) {
if(j-i < 3) {
/*
此判断是在基于s[j] == s[i]的情况下
因为子串长度为2,3的情况。
*/
dp[i][j] = true;
} else {
//状态转移,前提是s[j] == s[i]的情况下
dp[i][j] = dp[i+1][j-1];
}
}
//判断一下,更新最大回文子串
if(j-i+1 > maxLen && dp[i][j]) {
maxLen = j-i+1;
indexFrom = i;
}
}
}
return s.substr(indexFrom , maxLen);
}
};