题意:求出最长的串长度,该串既是s1的前缀又是s2的后缀.
思路:把两个字符串连起来求一下前缀数组next[]即可~当然要用”#”或者其他非小写字母连接起来防止两个字符串真的混起来,比如s1=”a”,s2=”aaaa”这种情况。
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
const int MAXN = 100011;
int next[MAXN],Min;
char s[MAXN],t[MAXN/2];
void makenext(){
int M = strlen(s),i=0,j=-1;next[0]=-1;
while(i<M){
if(j==-1||s[i]==s[j])next[++i]=++j;
else j = next[j];
}
}
void solve(){
int i = strlen(s);
i = next[i-1];
s[i] = 0;
if(i!=0)
printf("%s %d\n",s,i);
else
printf("%d\n",i);
}
int main(){
while(scanf("%s%s",s,t)!=EOF){
int l;
l=strlen(s);
s[l]='A';s[l+1]=0;
l=strlen(t);
t[l]='B';t[l+1]=0;
strcat(s,t);
makenext();
solve();
}
return 0;
}