分析:
看到好多题解都是利用dp去记录是否是回文串,其实dp可以直接记录回文串的长度,这里定义dp[i][j]是以i开头j结尾的字符串是否是回文串,不是为0,是的话记录它的长度。
#include<iostream>
using namespace std;
int dp[1001][1001]={0};
int main()
{
string str;
getline(cin,str);
int maxans=-1;
for(int i=str.size()-1;i>=0;i--)
for(int j=i;j<str.size();j++)
{
if(i==j)
dp[i][j]=1;
else if(str[i]==str[j])
{
if(i==j-1)
dp[i][j]=2;
else if(dp[i+1][j-1]!=0)
dp[i][j]=dp[i+1][j-1]+2;
else
dp[i][j]=0;
}
maxans=maxans>dp[i][j]?maxans:dp[i][j];
}
cout<<maxans;
return 0;
}