char *LCS(char *a,char *b) { int len_a = strlen(a); //获取字串的长度 int len_b = strlen(b); char *p; int c[N][N] = {0}; //矩阵c记录两串的匹配情况 int start,end,len,i,j; //start表明最长公共子串的起始点,end表明最长公共子串的终止点 end = len = 0; //len表明最长公共子串的长度 for(i=0;i<len_a;i++) //串开始从前向后比较 { for(j=0;j<len_b;j++) { if(a[i] == b[j]) if(i == 0 || j == 0) c[i][j] = 1; else c[i][j] = c[i-1][j-1] + 1; if(c[i][j] > len) { len = c[i][j]; end = j; } } } start = end - len + 1; p = (char *)malloc(len+1); //数组p记录最长公共子串 for(i=start;i<=end;i++) p[i-start] = b[i]; p[len] = '\0'; for(j=0;j<len_b;j++) { for(i=0;i<len_a;i++) printf("%2d",c[i][j]); printf("\n"); } return p; }