编辑代码

#include <stdio.h>  
#include <string.h>  
  
int max(int a, int b) {  
    return (a > b) ? a : b;  
}  
  
void findLCS(char *X, char *Y, int m, int n) {  
    int L[m + 1][n + 1];  
    int i, j;  
  
    // 构建L[m+1][n+1]数组,并将所有元素初始化为0  
    for (i = 0; i <= m; i++) {  
        for (j = 0; j <= n; j++) {  
            L[i][j] = 0;  
        }  
    }  
  
    // 构建L[m+1][n+1]数组的其他元素  
    for (i = 1; i <= m; i++) {  
        for (j = 1; j <= n; j++) {  
            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]);  
            }  
        }  
    }  
  
    // 打印最大公共子序列的长度  
    printf("%d\n", L[m][n]);  
}  
  
int main() {  
    char X[] = "ABCBDAB";  
    char Y[] = "BDCAB";  
    int m = strlen(X);  
    int n = strlen(Y);  
    findLCS(X, Y, m, n);  
    return 0;  
}