#include <stdio.h>
#include <string.h>
int lcs(char* s1, char* s2, int n1, int n2) {
int dp[n1+1][n2+1];
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= n1; i++) {
for (int j = 1; j <= n2; j++) {
if (s1[i-1] == s2[j-1]) {
dp[i][j] = dp[i-1][j-1] + 1;
} else {
dp[i][j] = (dp[i-1][j] > dp[i][j-1]) ? dp[i-1][j] : dp[i][j-1];
}
}
}
int i = n1, j = n2;
char lcs[dp[n1][n2]+1];
int k = dp[n1][n2];
while (i > 0 && j > 0) {
if (s1[i-1] == s2[j-1]) {
lcs[k--] = s1[i-1];
i--;
j--;
} else if (dp[i-1][j] > dp[i][j-1]) {
i--;
} else {
j--;
}
}
lcs[dp[n1][n2]] = '\0';
printf("最长公共字符串子序列为:%s\n", lcs);
return dp[n1][n2];
}
int main() {
char s1[] = "ABCDGH";
char s2[] = "AGGTAB";
int n1 = strlen(s1);
int n2 = strlen(s2);
int len = lcs(s1, s2, n1, n2);
printf("最长公共字符串子序列的长度为:%d\n", len);
return 0;
}