c语言实现最长公共子序列
时间: 2024-04-14 14:24:25 浏览: 152
输出最长公共子序列 c语言
C语言可以通过动态规划算法来实现最长公共子序列(Longest Common Subsequence,简称LCS)的求解。下面是一种常见的实现方式:
```c
#include <stdio.h>
#include <string.h>
int max(int a, int b) {
return (a > b) ? a : b;
}
void lcs(char* str1, char* str2, int m, int n) {
int dp[m + 1][n + 1];
// 初始化dp数组
for (int i = 0; i <= m; i++) {
for (int j = 0; j <= n; j++) {
if (i == 0 || j == 0)
dp[i][j] = 0;
else if (str1[i - 1] + 1;
else
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
}
// 构造最长公共子序列
int index = dp[m][n];
char lcs[index + 1];
lcs[index] = '\0';
int i = m, j = n;
while (i > 0 && j > 0) {
if (str1[i - 1] == str2[j - 1]) {
lcs[index - 1] = str1[i - 1];
i--;
j--;
index--;
} else if (dp[i - 1][j] > dp[i][j - 1])
i--;
else
j--;
}
// 输出最长公共子序列
printf("最长公共子序列为:%s\n", lcs);
}
int main() {
char str1[] = "ABCBDAB";
char str2[] = "BDCAB";
int m = strlen(str1);
int n = strlen(str2);
lcs(str1, str2, m, n);
return 0;
}
```
上述代码中,我们使用一个二维数组`dp`来记录最长公共子序列的长度。通过动态规划的思想,我们逐步计算出`dp`数组的值。最后,根据`dp`数组的值构造出最长公共子序列。
阅读全文