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