1435 回文字串
如果这个题用枚举来做,因该也可以过
不过貌似并没有人用暴力来做啊
貌似这个题并不难理解,需要学会转化问题
首先先从谈样例入手,ab3bd
它的倒序就是,db3ba
大胆地猜想,这样就能转化成什么问题呢?
可以这样来理解,正序与倒序的重合部分就是回文的部分,如果把公共的部分减去就能求出来所要添加的部分了
这样不就求出来了吗
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
char s1[5001],s2[5001];
int dp[5001][5001];
int n;
int main()
{
scanf("%s",s1+1);
n=strlen(s1+1);
for(int i=1;i<=n;i++)
s2[i]=s1[n-i+1];//倒序存储一遍
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(s1[i]==s2[j])
dp[i][j]=dp[i-1][j-1]+1;//发现有重合的
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
cout<<n-dp[n][n]<<endl;
return 0;
}
记得原来做过一个类似的,好像也是一个回文的,当时不太明白,现在算是理解了
貌似还有优秀的做法,不管了