问题 1:最长公共子序列(LCS)给定两个字符串 X 和 Y,找出它们的最长公共子序列的长度。最长公共子序列是指两个序列的公共子序列中长度最长的一个。输入:两个字符串 X 和 Y(长度不超过 100)用c语言实现
时间: 2024-10-29 21:10:17 浏览: 86
在C语言中,可以使用动态规划(Dynamic Programming)算法来解决最长公共子序列(LCS)问题。这里给出一个简单的递推函数实现:
```c
#include <stdio.h>
#include <string.h>
int lcs(char *X, char *Y, int m, int n) {
int L[m + 1][n + 1];
int i, j;
// 初始化第一行和第一列
for (i = 0; i <= m; i++) {
L[i][0] = 0;
}
for (j = 0; j <= n; j++) {
L[0][j] = 0;
}
// 动态填充L数组
for (i = 1; i <= m; i++) {
for (j = 1; j <= n; j++) {
if (X[i - 1] == Y[j - 1]) {
L[i][j] = L[i - 1][j - 1] + 1;
} else {
L[i][j] = max(L[i - 1][j], L[i][j - 1]);
}
}
}
return L[m][n]; // 返回最长公共子序列的长度
}
int main() {
char X[] = "ABCBDAB";
char Y[] = "BDCAB";
int m = strlen(X);
int n = strlen(Y);
printf("Length of LCS is %d\n", lcs(X, Y, m, n));
return 0;
}
```
在这个代码中,`lcs()` 函数计算了 `X` 和 `Y` 的最长公共子序列长度,并通过 `max()` 函数处理 `X[i - 1]` 与 `Y[j - 1]` 不相等的情况。
阅读全文