动态规划`
class Solution {
public:
string longestPalindrome(string s) {
vector<vector<int>> dp;
vector<int> one(s.length(),0);
for(int i=0;i<s.length();i++)
{
dp.push_back(one);
}
for(int i=0;i<dp.size();i++)
{
dp[i][i]=1;
}
int step=1;
int max=1;
int kaishi=0;
while(step<s.length())
{
for(int i=0;i+step<s.length();i++)
{
if(s[i]==s[i+step])
{
if(step==1)
dp[i][i+step]=2;
else
{
if(dp[i+1][i+step-1]==step-1)
dp[i][i+step]=dp[i+1][i+step-1]+2;
else
dp[i][i+step]=dp[i+1][i+step-1];
}
if(dp[i][i+step]>max)
{
max=dp[i][i+step];
kaishi=i;
}
}
else
{
if(step==1)
dp[i][i+step]=1;
else
dp[i][i+step]=dp[i+1][i+step-1];
if(dp[i][i+step]>max)
{
max=dp[i][i+step];
kaishi=i;
}
}
}
step++;
}
string res(max,0);
int dd=0;
for(int i=kaishi;i<kaishi+max;i++,dd++)
res[dd]=s[i];
return res;
}
};