输入
第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000)
输出
输出最长的子序列,如果有多个,随意输出1个。
输入示例
abcicba abdkscab 输出示例
abca
#include <stdio.h>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m,lcs[1005][1005],l[1005][1005];
char a[1005],b[1005];
void hh(int x,int y)
{
if(x==0 || y==0)
return;
else if(l[x][y]==1)
{
hh(x-1,y-1);
printf("%c",a[x-1]);
//printf("%d\n",x-1);
}
else if(l[x][y]==2)
hh(x-1,y);
else if(l[x][y]==3)
hh(x,y-1);
}
int main()
{
memset(lcs,0,sizeof(lcs));
scanf("%s %s",&a,&b);
n=strlen(a);
m=strlen(b);
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(a[i]==b[j])
{
//printf("%d %d\n",i,j);
lcs[i+1][j+1]=lcs[i][j]+1;
l[i+1][j+1]=1;
}
else
{
lcs[i+1][j+1]=max(lcs[i][j+1],lcs[i+1][j]);
if(lcs[i][j+1]>=lcs[i+1][j]) l[i+1][j+1]=2;
else if(lcs[i][j+1]<lcs[i+1][j]) l[i+1][j+1]=3;
}
}
}
//printf("%d\n",lcs[n][m]);
hh(n,m);
printf("\n");
}