最长公共序列与最长公共子串不同
abefb
akbekfkb LCS最长公共序列
akbekfkb 最长公共子串
本题可以多写几组数据就可以推出,所谓添加最少的数,就是字符串长度减去原字符串和回文串最长公共序列的长度。
例如
ab cec df ->加上四个 abfd cec dfba
fd cec ba
# include<iostream>
# include<stack>
# include<cstring>
# include<math.h>
# include<map>
# include<queue>
# include<iomanip>
using namespace std;
typedef unsigned long long int ul;
int dp[1010][1010];
int main ()
{
string x;
cin>>x;
string s=" ";
s+=x;
string t=" ";
for(int i=s.length()-1;i>=1;i--)
{
t+=s[i];
}
//最长公共序列不需要连续
for(int i=1;i<s.length();i++)
{
for(int j=1;j<s.length();j++)
{
if(s[i]==t[j])
{
dp[i][j]=dp[i-1][j-1]+1;
}
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
cout<<s.length()-1-dp[s.length()-1][s.length()-1];
return 0;
}