51Nod1092 回文字符串(LCS)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42391248/article/details/84699566

这道题我现在还很迷,只知道把字符串逆序,然后求两个字符串的LCS,最后字符串的长度减去公共子串长度,就是答案。但是为什么是这样呢?我很迷啊。。。。。。。。。。。。。。。who can tell me?

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
int dp[1005][1005];
int main()
{
	string a;
	cin>>a;
	string b(a.rbegin(),a.rend());	
	memset(dp,0,sizeof(dp));
	for(int i=1;i<=a.length();i++)
		for(int j=1;j<=b.length();j++)
			dp[i][j]=max(max(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1]+(a[i-1]==b[j-1]?1:0));
	cout<<a.length()-dp[a.length()][b.length()]<<endl;
}

猜你喜欢

转载自blog.csdn.net/qq_42391248/article/details/84699566