1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 char a[250000],b[110000]; 5 int sa[250000],x[250000],wv[250000],ws[250000],h[250000],rank[250000],wa[250000],wb[250000]; 6 int cmp(int *r,int a,int b,int l){return (r[a]==r[b])&&(r[a+l]==r[b+l]);} 7 void calheight(int n,int *rank) 8 { 9 int i,j,k=0; 10 for(i=0;i<n;h[rank[i++]]=k) 11 for(k?k--:0,j=sa[rank[i]-1];a[i+k]==a[j+k];k++); 12 } 13 void DA(char *r,int *sa,int n,int m) 14 { 15 int i,j,k,*x=wa,*y=wb,*t,p; 16 for(i=0;i<m;i++)ws[i]=0; 17 for(i=0;i<n;i++)ws[x[i]=r[i]]++; 18 for(i=1;i<m;i++)ws[i]+=ws[i-1]; 19 for(i=n-1;i>=0;i--)sa[--ws[x[i]]]=i; 20 for(j=1,p=1;p<n;j*=2,m=p) 21 { 22 for(p=0,i=n-j;i<n;i++)y[p++]=i; 23 for(i=0;i<n;i++)if(sa[i]>=j)y[p++]=sa[i]-j; 24 for(i=0;i<n;i++)wv[i]=x[y[i]]; 25 for(i=0;i<m;i++)ws[i]=0; 26 for(i=0;i<n;i++)ws[wv[i]]++; 27 for(i=1;i<m;i++)ws[i]+=ws[i-1]; 28 for(i=n-1;i>=0;i--)sa[--ws[wv[i]]]=y[i]; 29 for(t=x,x=y,y=t,p=1,x[sa[0]]=0,i=1;i<n;i++) 30 x[sa[i]]=cmp(y,sa[i-1],sa[i],j)?p-1:p++; 31 } 32 calheight(n,x); 33 } 34 int main() 35 { 36 int la,lb,f_b,f_e,s_b,s_e,max,i,n; 37 scanf("%s",a); 38 la=strlen(a); 39 scanf(" "); 40 scanf("%s",b); 41 lb=strlen(b); 42 f_b=0; 43 f_e=la-1; 44 a[la]='#'; 45 s_b=la; 46 for(i=0;i<lb;i++)a[++la]=b[i]; 47 s_e=la; 48 a[la+1]=0; 49 DA(a,sa,la+1,256); 50 //calheight(la+1); 51 max=-0x7fffffff; 52 for(i=2;i<=la;i++) 53 { 54 if(h[i]>max&&((sa[i]>=f_b&&sa[i]<=f_e&&sa[i-1]>=s_b&&sa[i-1]<=s_e)||(sa[i]>=s_b&&sa[i]<=s_e&&sa[i-1]>=f_b&&sa[i-1]<=f_e)))max=h[i]; 55 } 56 printf("%d",max); 57 return 0; 58 }