#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<algorithm>
#include<iostream>
#include<time.h>
using namespace std;
int dp[105][105];
int mark[105];
int path[105][105];
char str1[105], str2[105];
int main()
{
str1[0] = str2[0] = '0';
while (cin >> str1 + 1 >> str2 + 1)
{
int i, j, k;
memset(dp, 0, sizeof(dp));
memset(mark, -1, sizeof(mark));
memset(path, 0, sizeof(path));
int len1, len2;
len1 = strlen(str1) - 1;
len2 = strlen(str2) - 1;
for (i = 1; i <= len1; i++)
{
for (j = 1; j <= len2; j++)
{
if (str1[i] == str2[j])
{
dp[i][j] = dp[i - 1][j - 1] + 1;
}
else if (dp[i - 1][j] > dp[i][j - 1])
{
dp[i][j] = dp[i - 1][j];
path[i][j] = 1;
}
else
{
dp[i][j] = dp[i][j - 1];
path[i][j] = 2;
}
}
}
for (i = len1, j = len2; i >= 1 && j >= 1;)
{
if (str1[i] == str2[j])
{
mark[i] = j;
i--;
j--;
}
else if (path[i][j] == 1)
{
i--;
}
else
{
j--;
}
}
int temp = 1;
for (i = 1; i <= len1; i++)
{
if (mark[i]== -1)
{
printf("%c", str1[i]);
}
else
{
for (k = temp; k <= mark[i]; k++)
{
printf("%c", str2[k]);
}
temp= mark[i] + 1;
}
}
for (i = temp; i <= len2; i++)
printf("%c", str2[i]);
printf("\n");
}
return 0;
}
HDU 1503(字符串,合并输出)
最新推荐文章于 2020-04-17 15:02:57 发布