#include <iostream>
#include <cstring>
#include <iostream>
using namespace std;
/*
求出最大的公共子序列并返回
*/
string LCSL(string str1, string str2)
{
int i,j;
int len1=str1.size();
int len2=str2.size();
int len=max(len1,len2);
/*定义一个方型的矩阵*/
int dp[len+1][len+1];
/*多出两个0行*/
for(int i=0; i<=len;i++)
{
dp[i][0]=0;
dp[0][i]=0;
}
for(int i=1;i<=len1;i++)
{
for(int j=1;j<=len2;j++)
{
/*i-1是因为多出了一个0行*/
if(str1[i-1]==str2[j-1])
{
dp[i][j]=dp[i-1][j-1]+1;
}
else
{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
}
/*根据dp矩阵推出最大公共子序列*/
string lcs("");
for(int i=len1; i>=1 ;i--)
{
if(dp[i][len2]!=dp[i-1][len2])
lcs=str1[i-1]+lcs;
}
return lcs;
}
int main()
{
string str1("1x2x3x4xx56xxxx7x");
string str2("1yy2yy3yy45yy6yyy");
cout<<str1<<endl;
cout<<str2<<endl;
cout<<LCSL(str1,str2)<<endl;
return 0;
}
【day-4】最大公共子序列
最新推荐文章于 2023-06-30 23:06:51 发布