题意:
给俩个字符串,要找第一个串的前缀等于第二个串的后缀。为这个前缀最长可以是多少
不可以直接s1+s2 然后预处理……
特殊的例子
aabaa
baaba
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
string s1,s2;
int pre[50010];
int main()
{
//freopen("in.in","r",stdin);
while(cin>>s1>>s2)
{
s1='0'+s1;
int l1=s1.size();
int j=0;
pre[0]=0;
for(int i=2;i<l1;i++)
{
while(j>0&&s1[j+1]!=s1[i]) j=pre[j];
if(s1[j+1]==s1[i]) j++;
pre[i]=j;
}
int st=0;
int l2=s2.size();
for(int i=0;i<l2;i++)
{
while(st>0&&s1[st+1]!=s2[i]) st=pre[st];
if(s1[st+1]==s2[i]) st++;
if(st==l1&&i!=l2-1) st=pre[st];
}
if(st==0) printf("0\n");
else {
for(int i=1;i<=st;i++) printf("%c",s1[i]);
printf(" %d\n",st);
}
}
return 0;
}