用c语言代码实现求字符串序列“ABCDBAB”和“BDCABA”的最长公共子序列,测试输入: a=“ABCDBAB” b=“BDCABA” 输出示例: BCBA
时间: 2023-11-08 20:04:21 浏览: 401
可以使用动态规划算法来解决这个问题。具体实现如下:
```c
#include <stdio.h>
#include <string.h>
#define MAX_N 100
int max(int a, int b) {
return a > b ? a : b;
}
int lcs(char *a, char *b, int n, int m) {
int dp[MAX_N + 1][MAX_N + 1];
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (a[i - 1] == b[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[n][m];
}
int main() {
char a[] = "ABCDBAB";
char b[] = "BDCABA";
int n = strlen(a);
int m = strlen(b);
printf("%d\n", lcs(a, b, n, m));
return 0;
}
```
输出结果为:
```
4
```
即最长公共子序列为 "BCBA"。
阅读全文