#include<stdio.h>#include<string.h>// 定义一个最大值宏#define max(a, b) ((a > b) ? a : b)// 函数声明intlcs(char *X, char *Y, int m, int n);
// 计算最长公共子序列的长度intlcs(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];
}
intmain(){
char X[] = "CCCHENFEG";
char Y[] = "CScenFNG";
int m = strlen(X);
int n = strlen(Y);
// 调用lcs函数并输出结果printf("最长公共子序列的长度为 %d\n", lcs(X, Y, m, n));
return0;
}