#include<stdio.h>#include<string.h>// 定义一个最大值宏#define max(a, b) ((a > b) ? a : b)// 函数声明intlcs(char *X, char *Y, int m, int n);
intmain(){
char X[] = "ABCBDAB";
char Y[] = "BDCAB";
int m = strlen(X);
int n = strlen(Y);
// 调用lcs函数并输出结果printf("Length of LCS is %d\n", lcs(X, Y, m, n));
return0;
}
// 计算最长公共子序列的长度intlcs(char *X, char *Y, int m, int n){
int L[m + 1][n + 1];
int i, j;
// 构建L[m+1][n+1]的二维数组,其中L[i][j]表示X[0..i-1]和Y[0..j-1]的LCS的长度for (i = 0; i <= m; i++) {
for (j = 0; j <= n; j++) {
if (i == 0 || j == 0)
L[i][j] = 0;
elseif (X[i - 1] == Y[j - 1])
L[i][j] = L[i - 1][j - 1] + 1;
else
L[i][j] = max(L[i - 1][j], L[i][j - 1]);
}
}
return L[m][n];
}