编辑代码

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

#define MAX_LEN 100

int L[MAX_LEN + 1][MAX_LEN + 1];

int lcs(char X[], char Y[], int m, int n) {
    for (int i = 0; i <= m; i++) {
        for (int 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] = (L[i - 1][j] > L[i][j - 1]) ? L[i - 1][j] : L[i][j - 1];
        }
    }

    return L[m][n];
}

void printLCS(char X[], char Y[], int m, int n, int len) {
    char lcs[MAX_LEN];
    lcs[len] = '\0';

    int i = m, j = n;
    while (i > 0 && j > 0) {
        if (X[i - 1] == Y[j - 1]) {
            lcs[len - 1] = X[i - 1];
            i--;
            j--;
            len--;
        } else if (L[i - 1][j] > L[i][j - 1]) {
            i--;
        } else {
            j--;
        }
    }

    printf("Longest Common Subsequence: %s\n", lcs);
}

int main() {
    char X[MAX_LEN], Y[MAX_LEN];

    printf("Enter the first string: ");
    scanf("%s", X);
    printf("Enter the second string: ");
    scanf("%s", Y);

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

    int len = lcs(X, Y, m, n);

    if (len > 0) {
        printLCS(X, Y, m, n, len);
    } else {
        printf("No common subsequence found.\n");
    }

    return 0;
}