给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。
比如两个串为:
abcicba
abdkscab
ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。
输入
第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000)
输出
输出最长的子序列,如果有多个,随意输出1个。
输入示例
abcicba abdkscab
输出示例
abca
请选取你熟悉的语言,并在下面的代码框中完成你的程序,注意数据范围,最终结果会造成Int32溢出,这样会输出错误的答案
AC代码如下:
#include<bits/stdc++.h>
using namespace std;
char a[1005],b[1005];
int LCS[1005][1005];
char c[1005];
int main()
{
int m,n;
gets(a);
gets(b);
m=strlen(b);
n=strlen(a);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i-1]==b[j-1]) LCS[i][j]=LCS[i-1][j-1]+1;
else LCS[i][j]=max(LCS[i-1][j],LCS[i][j-1]);
}
}
int len=LCS[n][m];
int i=n;
int j=m;
while(LCS[i][j])
{
if(LCS[i][j]==LCS[i-1][j]) i--;
else if(LCS[i][j]==LCS[i][j-1]) j--;
else c[len--]=a[i-1],i--,j--;
}
printf("%s\n",c+1);
return 0;
}