题目描述
一个字符串A的子序列被定义成从A中顺次选出若干个字符构成的序列。如A=“cdaad" ,顺次选1,3,5个字符就构成子序列" cad" ,现给定两个字符串,求它们的最长共公子序列。
输入
第一行两个字符串用空格分开。
输出
最长子序列的长度。
样例输入
abccd aecd
样例输出
3
提示
两个串的长度均小于2000
#include<bits/stdc++.h>
using namespace std;
char a[2001],b[2001];
int ans[2001][2001];
int main()
{
scanf("%s %s",a,b);
int num1=strlen(a);
int num2=strlen(b);
for(int i=1;i<=num1;i++)
{
for(int j=1;j<=num2;j++)
{
ans[i][j]=max(ans[i-1][j],ans[i][j-1]);
if(a[i-1]==b[j-1])
{
ans[i][j]=max(ans[i-1][j-1]+1,ans[i][j]);
}
}
}
printf("%d",ans[num1][num2]);
return 0;
}