最长公共子序列问题c语言代码
时间: 2023-10-14 07:21:56 浏览: 97
Sure, 其实最长公共子序列问题是经典的动态规划问题。下面是一个简单的C语言代码实现:
```
#include <stdio.h>
#include <string.h>
#define MAX(a, b) ((a) > (b) ? (a) : (b))
int longestCommonSubsequence(char *text1, char *text2) {
int m = strlen(text1), n = strlen(text2);
int dp[m + 1][n + 1];
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (text1[i - 1] == text2[j - 1]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = MAX(dp[i - 1][j], dp[i][j - 1]);
}
}
}
return dp[m][n];
}
int main() {
char text1[] = "abcde";
char text2[] = "ace";
printf("The length of longest common subsequence is: %d\n", longestCommonSubsequence(text1, text2));
return 0;
}
```
在上面的代码中,我们用 `dp[i][j]` 表示 `text1[0:i]` 和 `text2[0:j]` 的最长公共子序列长度。如果当前字符相同,则取左上方的值加上1,否则取左方和上方的最大值。最后输出 `dp[m][n]` 即可。
希望能够帮助你!
阅读全文