#include <stdio.h>
#include <string.h>
#define Len 100
int table[Len + 1][Len + 1];
void find(char str1[], char str2[]) {
int len1 = strlen(str1);
int len2 = strlen(str2);
for (int i = 0; i <= len1; i++) {
for (int j = 0; j <= len2; j++) {
if (i == 0 || j == 0)
table[i][j] = 0;
else if (str1[i - 1] == str2[j - 1])
table[i][j] = table[i - 1][j - 1] + 1;
else
table[i][j] = (table[i - 1][j] > table[i][j - 1]) ? table[i - 1][j] : table[i][j - 1];
}
}
printf("长度: %d\n", table[len1][len2]);
int index = table[len1][len2];
char lcs[index + 1];
lcs[index] = '\0';
int i = len1, j = len2;
while (i > 0 && j > 0) {
if (str1[i - 1] == str2[j - 1]) {
lcs[index - 1] = str1[i - 1];
i--;
j--;
index--;
} else if (table[i - 1][j] > table[i][j - 1]) {
i--;
} else {
j--;
}
}
printf("子序列: %s\n", lcs);
}
int main() {
char str1[] = "ABCBDAB";
char str2[] = "BDCAB";
find(str1, str2);
char str3[] = "AB";
find(str1, str3);
char str4[] = "ABB";
find(str1, str4);
return 0;
}