最长公共子序列问题C语言
时间: 2024-04-08 09:24:57 浏览: 151
最长公共子序列问题是计算两个字符串之间的最长公共子序列的问题。在C语言中,可以使用动态规划算法来解决这个问题。具体步骤如下:
1. 定义一个二维数组dp,其中dp[i][j]表示text1前i个字符和text2前j个字符的最长公共子序列的长度。
2. 初始化dp数组,将dp[j]和dp[i]都设置为0,因为一个字符串和空字符串的最长公共子序列长度为0。
3. 遍历text1和text2的每个字符,如果text1[i-1]等于text2[j-1],则dp[i][j]等于dp[i-1][j-1]+1,否则dp[i][j]等于dp[i-1][j]和dp[i][j-1]中的较大值。
4. 遍历完整个dp数组后,dp[m][n]即为text1和text2的最长公共子序列的长度。
下面是C语言的代码实现:
```c
#include <stdio.h>
#include <string.h>
int max(int a, int b) {
return a > b ? a : b;
}
int longestCommonSubsequence(char *text1, char *text2) {
int m = strlen(text1);
int 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";
int result = longestCommonSubsequence(text1, text2);
printf("%d\n", result); // 输出:3
return 0;
}
```
阅读全文