最长公共子序列的c语言代码
时间: 2024-06-19 07:04:39 浏览: 153
最长公共子序列是指在两个字符串中最长的相同子序列,可以通过动态规划来解决。以下是一份c语言代码实现:
```c
#include<stdio.h>
#include<string.h>
#define MAXN 1001
int dp[MAXN][MAXN];
int main() {
char str1[MAXN], str2[MAXN];
int len1, len2;
scanf("%s %s", str1, str2);
len1 = strlen(str1);
len2 = strlen(str2);
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][j-1] > dp[i-1][j] ? dp[i][j-1] : dp[i-1][j];
}
}
}
printf("%d\n", dp[len1][len2]);
return 0;
}
```
以上代码中,`dp[i][j]`表示第一个字符串前i个字符和第二个字符串前j个字符的最长公共子序列长度。当两个字符相同时,`dp[i][j]`等于`dp[i-1][j-1]+1`,否则为左侧或上方的最大值。最后输出`dp[len1][len2]`即可。
阅读全文