题目:P2957 [USACO09OCT] Barn Echoes G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<stdio.h>
#include<string.h>
int main()
{
int i, j;
char a[100], b[100];
scanf("%s %s", a, b); //万能的scanf输入
int n = strlen(a) < strlen(b) ? strlen(a) : strlen(b); //sizeof函数返回字符串长度
for(i=n; i>=1; i--) //从长到短扫描,找出最长的重复部分,最长不超过两个字符串中较短的那个
if(strncmp(a, b + strlen(b) - i, i) == 0) //strncmp(x,y,z)函数比较前z个字符是否相同,这里用来寻找字符串a的前缀和字符串b的后缀的最长重复部分
break; //一旦找到,立即退出循环
for(j=n; j>=1; j--)
if(strncmp(b, a + strlen(a) - j, j) == 0) //同上,寻找字符串a的后缀和字符串b的前缀的最长重复部分
break;
printf("%d", i > j ? i : j); //输出两重复部分中较长那个的长度
return 0;
}