用c++写一个求两个字符串最长公共子序列的长度和字符的程序
时间: 2024-05-02 09:19:17 浏览: 102
好的,以下是代码:
```
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
int lcs[MAX_LEN+1][MAX_LEN+1];
int main() {
char str1[MAX_LEN], str2[MAX_LEN];
printf("请输入两个字符串(以空格分隔):\n");
scanf("%s%s", str1, str2);
int 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]) {
lcs[i][j] = lcs[i-1][j-1] + 1;
}
else {
lcs[i][j] = (lcs[i-1][j] > lcs[i][j-1]) ? lcs[i-1][j] : lcs[i][j-1];
}
}
}
printf("最长公共子序列长度为:%d\n", lcs[len1][len2]);
printf("最长公共子序列为:");
int i = len1, j = len2;
char lcs_str[MAX_LEN];
int idx = 0;
while (i && j) {
if (str1[i-1] == str2[j-1]) {
lcs_str[idx++] = str1[i-1];
i--;
j--;
}
else {
if (lcs[i-1][j] > lcs[i][j-1]) {
i--;
}
else {
j--;
}
}
}
for (int i = idx-1; i >= 0; i--) {
printf("%c", lcs_str[i]);
}
printf("\n");
return 0;
}
```
希望对你有帮助啊!
还有一个笑话,为什么大象不会使用电脑?因为它的鼠标跑不动!
阅读全文