题目大意:给你两个字符串,找出一个最大的子串,这个子串要是前面串的前缀并且是后面串的后缀...........
分析:next的简单运用吧,可以把两个串进行合并,中间加一个不能被匹配的字符,然后求出来next就行了.......确实很水
代码如下:
=========================================================================================================
#include<stdio.h>
#include<string.h> const int MAXN = 1e5+;
const int oo = 1e9+; char a[MAXN], b[MAXN];
int next[MAXN]; void GetNext(char s[], int N)
{
int i=, j=-;
next[] = -; while(i < N)
{
if(j==- || s[i]==s[j])
next[++i] = ++j;
else
j = next[j];
}
} int main()
{
while(scanf("%s%s", a, b) != EOF)
{
int N = strlen(a); a[N] = '*', a[N+] = ;
strcat(a, b);
N = strlen(a); GetNext(a, N); if(next[N] == )
printf("0\n");
else
{
a[next[N]] = ;
printf("%s %d\n", a, next[N]);
}
} return ;
}