这道题有一些需要特殊注意的地方
①最短回文串长度为1,res初始化为1(当原串长度为1时保证答案为1)
②状态转移时,需要保证f[i][j]中区间i~j是整个回文串,回文长度为j-i+1
#include<bits/stdc++.h>
using namespace std;
string s;
const int N=1e3+5;
int f[N][N];
int res=1;
int main()
{
getline(cin,s);
int n=s.length();
for(int k=1;k<=n;k++)
for(int i=0;i+k-1<n;i++)
{
int j=i+k-1;
if(i==j)
{
f[i][i]=1;
continue;
}
if(s[i]==s[j]&&f[i+1][j-1]==j-i-1) f[i][j]=f[i+1][j-1]+2;
res=max(res,f[i][j]);
}
cout<<res;
}