问题: 给定两个字符串s1和s2(长度均不超过1000),求出这两个字符串的最大公共子串的长度。
例:s1=”abcad”
s2=”abd”
它们的最长公共子序列长度为3(”abd”),而最大公共子串长度为2(”ab”)
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std;
#define MAX 1050
char s1[MAX],s2[MAX];
int dp[MAX + 1][MAX + 1];
int main()
{
while(scanf("%s",s1) != EOF)
{
int len1,len2;
int i,j;
// int ret = -1;
scanf("%s",s2);
len1 = strlen(s1);
len2 = strlen(s2);
for(i = 0;i < len1;i++)
{
dp[i][0] = 0;
}
for(j = 0;j < len2;j++)
{
dp[0][j] = 0;
}
for(i = 0;i < len1;i++)
{
for(j = 0;j < len2;j++)
{
if(s1[i] == s2[j])
{
dp[i + 1][j + 1] = dp[i][j] + 1;
}
else
{
dp[i + 1][j + 1] = max(dp[i][j + 1],dp[i + 1][j]); //最长公共子序列长度
// dp[i + 1][j + 1] = 0; //最大公共子串长度
}
// ret = max(ret,dp[i + 1][j + 1]);
}
}
printf("%d\n",dp[len1][len2]);
// printf("%d\n",ret);
}
system("pause");
return 0;
}