class Solution {
public:
string longestPalindrome(string s) {
int n = s.length();
if (n==1)
return s;
vector<vector<int> > dp(n+1,vector<int>(n+1,0));//dp[i][j]表示从i到j是否为回文字符串
//初始化
for (int i=0; i<n; i++)
dp[i][i] = 1;
for (int i=0; i<n-1; i++)
if (s[i]==s[i+1])
dp[i][i+1] = 1;
for (int l=3; l<=n; l++)
{
for (int i=0; i+l-1<n; i++)
{
int j=i+l-1;
if (s[i] == s[j] && dp[i+1][j-1])
dp[i][j] = 1;
}
}
int max = 0;
int maxi=0,maxj=0;
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
{
if (dp[i][j]==1 && j-i+1>max)
{
max = j-i+1;
maxi = i;
maxj = j;
}
}
}
string result = "";
for (int i=maxi; i<=maxj; i++)
result += s[i];
return result;
}
};