next数组的理解,注意输出的长度不能大于s1和s2的最小长度
注意是多组数据 开始不知道让我wa的莫名其妙
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
char s1[120000], s2[60000], s3[60000];
int f[120000];
int len;
void getfail()
{
f[0] = f[1] = 0;
len = strlen(s1);
for(int i = 1; i < len; i++)
{
int j = f[i];
while(j && s1[j] != s1[i])
{
j = f[j];
}
f[i + 1] = s1[i] == s1[j] ? j + 1 : 0;
}
}
int main()
{
while(scanf("%s", s1)!=EOF)
{
scanf("%s", s2);
strcpy(s3, s1);
strcat(s1, s2);
getfail();
if(f[len] > strlen(s2))
{
if(strlen(s2) < strlen(s3))
printf("%s %d\n",s2, strlen(s2));
else
printf("%s %d\n", s3, strlen(s3));
}
else if(f[len])
{
for(int i = 0; i < f[len]; i++)
{
printf("%c", s1[i]);
}
printf(" %d\n", f[len]);
}
else
{
printf("0\n");
}
}
}