#include<iostream>
#include<cstring>
#include<cstdlib>
#define SIZE 100
using namespace std;
char str1[SIZE];
char str2[SIZE];
char ele_str[SIZE];
int D[SIZE][SIZE]={{0,0}};
int len1,len2,_count;
void dp()
{
len1=strlen(str1);
len2=strlen(str2);
for(int i=len1-1;i>=0;i--)
{
for(int j=len2-1;j>=0;j--) //匹配遍历
{
if(str1[i]==str2[j])
{
//
D[i][j]=D[i+1][j+1]+1; //串的话在那张表中只能斜着传,一个字符只能匹配一次
}
else
{D[i][j]=max(D[i+1][j],D[i][j+1]);}
}
}
}
void show()
{ cout<<"最长子序列长度";
cout<<D[0][0]<<endl;
cout<<"最长子序列:";
int n=D[0][0];
for(int i=0;i<len1;i++)
for(int j=0;j<len2;j++)
{
if(D[i][j]==n&&str1[i]==str2[j])
{
cout<<str1[i]<<" ";
n--;i++;j++;
}
}
cout<<endl;
}
int main()
{
while(cin>>str1>>str2)
{ memset(D,0,sizeof(D));
dp();
show();
}
return 0;
}
LCS
最新推荐文章于 2025-03-19 17:55:16 发布