#include<iostream>
#include<vector>
#include<string.h>
using namespace std;
void LCS_LENGTH(int B[100][100],int C[10][100],char *X,char *Y){
int m=strlen(X);
int n=strlen(Y);
for(int i=m-1;i>=0;i--){
X[i+1]=X[i];
}
for(int i=n-1;i>=0;i--){
Y[i+1]=Y[i];
}
/*
for(int i=1;i<=m;i++){
cout<<X[i];
}
cout<<endl;
for(int i=1;i<=n;i++){
cout<<Y[i];
}
*/
for(int i=1;i<=m;i++){
C[i][0]=0;
}
for(int j=0;j<=n;j++){
C[0][j]=0;
}
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
if(X[i]==Y[i]){
C[i][j]=C[i-1][j-1]+1;
B[i][j]=0;
} else {
if(C[i-1][j]>=C[i][j-1]){
C[i][j]=C[i-1][j];
B[i][j]=1;
} else {
C[i][j]=C[i][j-1];
B[i][j]=-1;
}
}
}
}
}
//Print
void PRINT_LCS(int B[100][100],char *X,int i,int j){
if(i==0 || j==0){
return;
}
if(B[i][j]==0){
PRINT_LCS(B,X,i-1,j-1);
cout<<X[i];
} else {
if(B[i][j]==1){
PRINT_LCS(B,X,i-1,j);
} else {
PRINT_LCS(B,X,i,j-1);
}
}
}
int main(){
int B[100][100],C[100][100];
char X[100],Y[100];
cin>>X;
cin>>Y;
int m=strlen(X);
int n=strlen(Y);
LCS_LENGTH(B,C,X,Y);
PRINT_LCS(B,X,m,n);
return 0;
}
算法导论最长公共子序列
最新推荐文章于 2022-10-26 19:55:43 发布