用c语言编程去实现寻找两个字符串的最长公共子序列
时间: 2023-12-24 18:03:37 浏览: 86
好的,下面是用 C 语言实现寻找两个字符串的最长公共子序列的代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
int longest_common_subsequence(char *str1, char *str2) {
int m = strlen(str1);
int n = strlen(str2);
int dp[MAX_LEN][MAX_LEN] = {0};
int i, j;
for (i = 1; i <= m; i++) {
for (j = 1; j <= n; j++) {
if (str1[i-1] == str2[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];
}
}
}
return dp[m][n];
}
int main() {
char str1[MAX_LEN] = "ABCBDAB";
char str2[MAX_LEN] = "BDCABA";
int lcs = longest_common_subsequence(str1, str2);
printf("The length of longest common subsequence is: %d\n", lcs);
return 0;
}
```
这段代码中,我们使用了一个二维数组 dp 来存储状态,其中 dp[i][j] 表示字符串 str1 的前 i 个字符和字符串 str2 的前 j 个字符的最长公共子序列的长度。我们使用两个循环来遍历这个数组,并根据状态转移方程来计算 dp[i][j] 的值。最终返回 dp[m][n],其中 m 和 n 分别为两个字符串的长度。
希望能帮到你!
阅读全文