C语言最长公共子序列
时间: 2023-11-25 13:51:28 浏览: 99
C语言求最长公共子序列
下面是C语言实现最长公共子序列的代码和注释:
```c
#include <stdio.h>
#include <string.h>
// 定义最大字符串长度
#define MAX_LEN 100
// 定义求最长公共子序列的函数
int lcs(char *str1, char *str2) {
// 获取两个字符串的长度
int len1 = strlen(str1);
int len2 = strlen(str2);
// 定义二维数组存储最长公共子序列的长度
int dp[MAX_LEN + 1][MAX_LEN + 1];
// 初始化数组
for (int i = 0; i <= len1; i++) {
for (int j = 0; j <= len2; j++) {
dp[i][j] = 0;
}
}
// 动态规划求解最长公共子序列的长度
for (int i = 1; i <= len1; i++) {
for (int j = 1; j <= len2; 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[len1][len2];
}
int main() {
// 定义两个字符串
char str1[MAX_LEN + 1] = "zxyxyz";
char str2[MAX_LEN + 1] = "xyyzx";
// 调用lcs函数求解最长公共子序列的长度
int len = lcs(str1, str2);
// 输出结果
printf("The length of the longest common subsequence is: %d\n", len);
return 0;
}
```
阅读全文