题解 | #查找两个字符串a,b中的最长公共子串#
查找两个字符串a,b中的最长公共子串
https://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506
//两层循环,从前往后遍历,字符串存的始终是最长且最靠前的子串 #include <stdio.h> #include<string.h> int main() { char arr1[300], arr2[300], p[300]; gets(arr1); gets(arr2); int i = 0, j = 0, q = 0, count = 0, max = 0, a = 0, b = 0, flag = 0, sz1 = strlen(arr1), sz2 = strlen(arr2); for (i = 0; i < sz1; i++) { for (j = 0; j < sz2; j++) { count = 0; a = i; b = j; if (arr1[a] == arr2[b]) { while (arr1[a] == arr2[b]) { count++; a++; b++; } if (count == max) { if (sz2<sz1&&j<flag)//这里可以简化掉,在程序开始时,利用strcpy将短的放入指定地址 { flag = j; a=i; for (q = 0; q < max; q++) { p[q] = arr1[a]; a++; } } } if (count > max) { flag = j; max = count; a=i; for (q = 0; q < max; q++) { p[q] = arr1[a]; a++; } } } } } for (q = 0; q < max; q++) { printf("%c", p[q]); } return 0; }