一个字符串A的子串被定义成从A中顺次选出若干个字符构成的串。如A=“cdaad" ,顺次选1,3,5个字符就构成子串" cad" ,现给定两个字符串,求它们的最长共公子串。
Input
第一行两个字符串用空格分开。
Output
最长子串的长度。
# include <iostream>
# include <cstring>
using namespace std;
int f[2010][2010];
char a[2010],b[2010];
int max(int a,int b)
{
if (a>=b) return a;
return b;
}
int main()
{
int i,j,len1,len2;
cin>>a>>b;
len1=strlen(a);
len2=strlen(b);
for(i=1;i<=len1;i++)
{
for(j=1;j<=len2;j++)
{
if (a[i-1]==b[j-1]) f[i][j]=f[i-1][j-1]+1;
else f[i][j]=max(f[i-1][j],f[i][j-1]);
}
}
cout<<f[len1][len2];
return 0;
}
Sample Input
abccd aecd
Sample Output
3
HINT
两个串的长度均小于2000