求兩個輸入序列的最長的公共子字符串的長度。子字符串中的全部字符在源字符串中必須相鄰。ide
如字符串:21232523311324和字符串312123223445,他們的最長公共子字符串爲21232,長度爲5。字符串
int LCSLength(int m,int n,char *x,char *y,int** &f,int& besti,int& bestj,int& max)it
{class
int i,j;di
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;}view
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;}vi
for(i=1;i<m;i++)co
for(j=1;j<n;j++){字符
if(x[i]==y[j]) {editor
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;
}