第一遍刷pat
题目思路
动态规划
dp[i][j]代表i到j是否对称,=1即对称
如果s[i]==s[j],则dp[i][j]=dp[i+1][j-1]
可以看出,长的对称子串由短的发展而来,所以先初始化L=1和L=2的情况
然后按照L递增的顺序,查找长的对称字串
我的憨憨程序
#include<bits/stdc++.h>
using namespace std;
int dp[1010][1010]={0};
int main()
{
string s;
getline(cin,s);
int len=s.length(),ans=1;
for(int i=0;i<len;i++)//初始化
{
dp[i][i]=1;
if(i<len-1&&s[i]==s[i+1])
{
dp[i][i+1]=1;
ans=2;
}
}
for(int L=3;L<=len;L++)//长度递增
{
for(int i=0;i+L-1<len;i++)
{
int j=i+L-1;
if(s[i]==s[j]&&dp[i+1][j-1]==1)
{
dp[i][j]=1;
ans=L;
}
}
}
printf("%d\n",ans);
}