一、题目
二、代码
class Solution
{
public:
//i j 表示[i,j]的范围
//相差大于 由左下角推出 所以自下往上 自左往右
string longestPalindrome(string s)
{
int i,j;
string return_string;
vector<vector<int>> dp(s.size(),vector<int>(s.size(),0));
int max_length=0;
for(i=s.size()-1;i>=0;i--)
{
for(j=i;j<s.size();j++)
{
if(j==i) //i j相等
{
dp[i][j]=1;
if(j-i+1>max_length)
{
max_length=j-i+1;
return_string.clear();
return_string=s.substr(i,max_length);
}
}
else if(abs(j-i)==1) //i j相差为1
{
if(s[i]==s[j])
{
dp[i][j]=1;
if(j-i+1>max_length)
{
max_length=j-i+1;
return_string.clear();
return_string=s.substr(i,max_length);
}
}
}
else //i j 相差大于1
{
if(s[i]==s[j])
{
dp[i][j]=dp[i+1][j-1]; //不会越界
if(dp[i][j]==1)
{
if(j-i+1>max_length)
{
max_length=j-i+1;
return_string.clear();
return_string=s.substr(i,max_length);
}
}
}
}
}
}
std::cout<<"max_length "<<max_length<<std::endl;
return return_string;
}
};