#include <iostream>
#include <cstring>
#include <string>
using namespace std;
#define N 100
char X[N], Y[N], str[N];
int c[N][N], num = 0;
int lcs_len(char * X, char* Y,int c[][N]) {
int m=strlen(X),n=strlen(Y),i,j;
for (i=0;i<=m;i++)
c[i][0]=0;
for (i=0;i<=n;i++)
c[0][i]=0;
for (i=1;i<=m;i++){
for (j=1;j<=n;j++){
if (X[i-1]==Y[j-1])
c[i][j]=c[i-1][j-1]+1;
else if(c[i-1][j]>=c[i][j-1])
c[i][j]=c[i-1][j];
else
c[i][j]=c[i][j-1];
}
}
return c[m][n];
}
char* build_lcs(char s[],char *X,char *Y){
int i=strlen(X),j=strlen(Y);
int k=lcs_len(X,Y,c);
s[k]='\0';
while (k>0){
if (c[i][j]==c[i-1][j])
i--;
else if (c[i][j]==c[i][j-1])
j--;
else{
s[--k]=X[i-1];
i--;j--;num++;
}
}
return s;
}
int main() {
cout << "输入长度小于" << N << "的字符串" << endl;
cin >> X;
cout << "请再输入长度小于" << N << "的字符串" << endl;
cin >> Y;
cout << "Lsc=" << build_lcs(str, X, Y) << endl;
cout << "最大子序列长度为" << num << endl;
return 0;
}
最长公告子序列
最新推荐文章于 2024-06-15 18:06:06 发布