#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 1005;
char A[maxn], B[maxn];
int c[maxn][maxn] = {0};
void print_lcs(int i, int j)
{
if(c[i][j] == 0)
return ;
if(c[i][j] == c[i][j - 1])
print_lcs(i, j - 1);
else if(c[i][j] == c[i - 1][j])
print_lcs(i - 1, j);
else
{
print_lcs(i - 1, j - 1);
printf("%c", A[i - 1]);
}
}
int main()
{
scanf("%s%s", A, B);
int n = strlen(A);
int m = strlen(B);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
{
if(A[i - 1] == B[j - 1])
c[i][j] = c[i - 1][j - 1] + 1;
else
c[i][j] = max(c[i][j - 1], c[i - 1][j]);
}
print_lcs(n, m);
return 0;
}
最长公共子串
最新推荐文章于 2020-05-12 21:31:41 发布