编辑代码

#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 lcs(char *X, char *Y, int m, int n) {
    int L[n + 1];
    int i, j;
    int prev, temp;

    // 初始化L数组
    memset(L, 0, sizeof(L));

    for (i = 1; i <= m; i++) {
        prev = 0;
        for (j = 1; j <= n; j++) {
            temp = L[j];
            if (X[i - 1] == Y[j - 1])
                L[j] = prev + 1;
            else
                L[j] = max(L[j], L[j - 1]);
            prev = temp;
        }
    }

    return L[n];
}
int main() {
    char X[] = "CCCHENFEG";
    char Y[] = "CScenFNG";

    int m = strlen(X);
    int n = strlen(Y);

    // 调用lcs函数并输出结果
    printf("最长公共子序列的长度为 %d\n", lcs(X, Y, m, n));

    return 0;
}