求两个输入序列的最长的公共子字符串的长度。子字符串中的所有字符在源字符串中必须相邻。


如字符串:21232523311324和字符串312123223445,他们的最长公共子字符串为21232,长度为5。


int LCSLength(int m,int n,char *x,char *y,int** &f,int& besti,int& bestj,int& max)


{


int i,j;


for(i=0;i<m;i++) {if(x[i]==y[0]) {f[i][0]=1;max=f[i][0];besti=i;bestj=0;} else f[i][0]=0;}


    for(i=0;i<n;i++) {if(x[0]==y[i]) {f[0][i]=1;max=f[0][i];besti=0;bestj=i;} else f[0][i]=0;}


for(i=1;i<m;i++)


for(j=1;j<n;j++){


if(x[i]==y[j]) {


f[i][j]=f[i-1][j-1]+1;


if(max<f[i][j]) {max=f[i][j];besti=i;bestj=j;}


}


else f[i][j]=0;


}


return 0;


}


int main()


{


char str1[100000],str2[100000];


int m,n,bi=0,bj=0,**c,i,max=0;


scanf("%s%s",str1,str2);


m=strlen(str1);n=strlen(str2);


c=(int**)malloc(m*sizeof(int*));


for(i=0;i<m;i++)


c[i]=(int*)malloc(n*sizeof(int));


LCSLength(m,n,str1,str2,c,bi,bj,max);


printf("%d\n",max);


for(i=bi-max+1;i<=bi;i++)


printf("%c",str1[i]);


printf("\n");


return 0;


}