最长公共子序列问题c代码实现
时间: 2024-06-17 17:03:58 浏览: 68
最长公共子序列问题 代码
5星 · 资源好评率100%
最长公共子序列(Longest Common Subsequence, LCS)问题是在给定的两个序列中找到一个最长的共同子序列的问题。下面是一个简单的C代码实现,采用动态规划算法:
```
#include <stdio.h>
#include <string.h>
#define MAXLEN 1000
int max(int a, int b) {
return (a > b) ? a : b;
}
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++) {
for (j = 0; j <= n; j++) {
if (i == 0 || j == 0) {
L[i][j] = 0;
} else 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[MAXLEN], Y[MAXLEN];
printf("请输入第一个字符串:");
scanf("%s", X);
printf("请输入第二个字符串:");
scanf("%s", Y);
int m = strlen(X);
int n = strlen(Y);
printf("两个字符串的最长公共子序列的长度为:%d\n", lcs(X, Y, m, n));
return 0;
}
```
阅读全文