#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int MAX = 300;
char a[MAX],b[MAX];
void cp(char *str1, char *str2)
{
int i,j,k,len1,len2,mm,x,y;
len1 = strlen(str1);
len2 = strlen(str2);
int c[MAX][MAX];
for(i = 0; i < len1+1; i++)
c[i][0]=0;
for(j = 0; j < len2+1; j++)
c[0][j]=0;
mm = -1;
for(i = 1 ; i < len1+1 ; i++)
{
for(j = 1; j < len2+1; j++)
{
if(str1[i-1]==str2[j-1])
c[i][j]=c[i-1][j-1]+1;
else
c[i][j]=0;
if(c[i][j]>mm)
{
mm=c[i][j];
x=i;
y=j;
}
}
}
char s[1000];
k=mm;
i=x-1,j=y-1;
s[k--]='\0';
while(i>=0 && j>=0)
{
if(str1[i]==str2[j])
{
s[k--]=str1[i];
i--;
j--;
}
else
break;
}
if(strlen(s))
{
printf("最长公共子串为:");
puts(s);
}
else
puts("没有公共子串!");
free(c);
}
int main(void)
{
while(~scanf("%s",a))
{
getchar();
gets(b);
cp(a, b);
}
return 0;
}
最长公共子串
最新推荐文章于 2023-04-18 23:37:02 发布