用next数组做,注意abab abab这个数据就可以了!!
#include<iostream>
#include<string>
#include<string.h>
#include<stdio.h>
using namespace std;
int n;
int next1[100015];
string s,ss,str;
void mn()
{
next1[0]=0;
for(int k=0,i=1;i<n;i++)
{
while(k>0&&s[k]!=s[i])
k=next1[k-1];
if(s[k]==s[i])
k++;
next1[i]=k;
}
}
int main()
{
while(cin>>ss>>str)
{
int f=0,l,l1,len;
s=ss+str;
l=ss.size();
l1=str.size();
n=s.size();
memset(next1,0,sizeof(next1));
mn();
len=min(l,l1);
if(next1[n-1]>len)
{
if(l<l1)
cout<<ss<<" "<<len<<"\n";
else
cout<<str<<" "<<len<<"\n";
continue;
}
for(int i=0;i<next1[n-1];i++)
{
f=1;
cout<<ss[i];
}
if(f)
cout<<" ";
cout<<next1[n-1]<<"\n";
}
return 0;
}