与“查找两个字符串a,b中的最长公共子串”题的解答一样,只是需要输出的是长度
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char str1[301];
char str2[301];
char res[301] = {0};
int dp[301][301] = {0};
int main()
{
//gets(str1);
//gets(str1);
scanf("%s",str1);
scanf("%s",str2);
int m = strlen(str1);
int n = strlen(str2);
int max = 0;
int start = 0;
if(m < n)
{
for (int i = 1; i <= m; i++) {
char c1 = str1[i - 1];
for (int j = 1; j <= n; j++) {
char c2 = str2[j - 1];
if (c1 == c2) {
dp[i][j] = dp[i - 1][j - 1] + 1;
}
if(dp[i][j] > max)
{
max = dp[i][j];
//start = i - max;
}
}
}
/*
for(int i=start; i < start+max; i++)
{
printf("%c", str1[i]);
}
*/
printf("%d\n", max);
}
else
{
for (int i = 1; i <= n; i++) {
char c1 = str2[i - 1];
for (int j = 1; j <= m; j++) {
char c2 = str1[j - 1];
if (c1 == c2) {
dp[i][j] = dp[i - 1][j - 1] + 1;
}
if(dp[i][j] > max)
{
max = dp[i][j];
//start = i - max;
}
}
}
/*
for(int i=start; i < start+max; i++)
{
printf("%c", str2[i]);
}
*/
printf("%d\n", max);
}
return 0;
}