编辑代码

#include <stdio.h>
#include <string.h>

// 定义一个最大值宏
#define max(a, b) ((a > b) ? a : b)

// 函数声明
int lcs(char *X, char *Y, int m, int n);

int main() {
    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));

    return 0;
}

// 计算最长公共子序列的长度
int lcs(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;
            else if (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];
}