生成最长公共子序列的c++代码
时间: 2023-10-14 10:28:47 浏览: 84
以下是生成最长公共子序列的c代码:
```
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 100
void LCS(char* str1, char* str2, int len1, int len2, int lcs[MAX_LENGTH][MAX_LENGTH]);
void printLCS(char* str, int len, int lcs[MAX_LENGTH][MAX_LENGTH], int i, int j);
int main()
{
char str1[MAX_LENGTH], str2[MAX_LENGTH];
int len1, len2;
int lcs[MAX_LENGTH][MAX_LENGTH] = { 0 };
printf("Enter the first string: ");
scanf("%s", str1);
len1 = strlen(str1);
printf("Enter the second string: ");
scanf("%s", str2);
len2 = strlen(str2);
LCS(str1, str2, len1, len2, lcs);
printf("The longest common subsequence is: ");
printLCS(str1, len1, lcs, len1, len2);
return 0;
}
void LCS(char* str1, char* str2, int len1, int len2, int lcs[MAX_LENGTH][MAX_LENGTH])
{
int i, j;
for (i = 0; i <= len1; i++)
{
for (j = 0; j <= len2; j++)
{
if (i == 0 || j == 0)
{
lcs[i][j] = 0;
}
else 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];
}
}
}
}
void printLCS(char* str, int len, int lcs[MAX_LENGTH][MAX_LENGTH], int i, int j)
{
if (i == 0 || j == 0)
{
return;
}
if (lcs[i][j] == lcs[i - 1][j - 1] + 1)
{
printLCS(str, len, lcs, i - 1, j - 1);
printf("%c", str[i - 1]);
}
else if (lcs[i - 1][j] > lcs[i][j - 1])
{
printLCS(str, len, lcs, i - 1, j);
}
else
{
printLCS(str, len, lcs, i, j - 1);
}
}
```
此代码使用动态规划算法生成最长公共子序列。它接受两个字符串作为输入,并为它们计算最长公共子序列。最后,它打印出最长公共子序列。
阅读全文