c语言编写,目标:动态规划算法中的最长公共子串(LCS)算法,即找出两个序列中最长的公共子序列。 功能: 1.lcs2: 计算两个序列的LCS 2.修改help的提示以反映最新添加的命令
时间: 2023-12-06 17:44:45 浏览: 70
好的,下面是代码实现:
```
#include <stdio.h>
#include <string.h>
#define MAXLEN 100
int lcs2(char *s1, char *s2, int len1, int len2, char *res) {
int dp[MAXLEN+1][MAXLEN+1], i, j, max_len = 0, end = 0;
memset(dp, 0, sizeof(dp));
for (i = 1; i <= len1; i++) {
for (j = 1; j <= len2; j++) {
if (s1[i-1] == s2[j-1]) {
dp[i][j] = dp[i-1][j-1] + 1;
if (dp[i][j] > max_len) {
max_len = dp[i][j];
end = i;
}
}
}
}
strncpy(res, s1 + end - max_len, max_len);
res[max_len] = '\0';
return max_len;
}
int main() {
char s1[MAXLEN], s2[MAXLEN], res[MAXLEN];
int len1, len2, len;
printf("请输入第一个序列:");
scanf("%s", s1);
printf("请输入第二个序列:");
scanf("%s", s2);
len1 = strlen(s1);
len2 = strlen(s2);
len = lcs2(s1, s2, len1, len2, res);
printf("最长公共子序列为:%s,长度为:%d\n", res, len);
return 0;
}
```
修改后的帮助提示:
```
请输入命令:
lcs2 - 计算两个序列的最长公共子序列
help - 显示帮助信息
exit - 退出程序
```
阅读全文