编辑代码

#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 1000

int max(int a, int b) {
    return a > b ? a : b;
}

int lcs(char* str1, char* str2) {
    int len1 = strlen(str1);
    int len2 = strlen(str2);
    int dp[MAX_LENGTH][MAX_LENGTH];
    int i, j;

    // 初始化动态规划数组
    for (i = 0; i <= len1; i++) {
        dp[i][0] = 0;
    }
    for (j = 0; j <= len2; j++) {
        dp[0][j] = 0;
    }

    // 填充动态规划数组
    for (i = 1; i <= len1; i++) {
        for (j = 1; j <= len2; j++) {
            if (str1[i-1] == str2[j-1]) {
                dp[i][j] = dp[i-1][j-1] + 1;
            } else {
                dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
            }
        }
    }

    // 返回最终结果
    return dp[len1][len2];
}

int main() {
    char str1[] = "ABCBDAB";
    char str2[] = "BDCAB";
    int result;

    result = lcs(str1, str2);

    printf("最长公共子序列的长度为%d\n", result);
    return 0;
}