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