题解 | #查找两个字符串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;
}
查看8道真题和解析