给定两个字符串 A 和 B,求最长公共子串。
论文题,把两个串合并起来,比较两个串各自的后缀的height值取最大即可。
#include#include #include #include #include #include #include #include using namespace std;const int N=200010;char s[N];int n,len,rank[N],sa[N],height[N],w[N];inline bool pan(int *x,int i,int j,int k){ int ti=i+k =0;i--)sa[--w[s[i]]]=i; r=1;x[sa[0]]=0; for(int i=1;i =k)y[yn++]=sa[i]-k; for(int i=0;i =0;i--)sa[--w[x[y[i]]]]=y[i]; swap(x,y);r=1;x[sa[0]]=0; for(int i=1;i ans){ if(0<=sa[i-1]&&sa[i-1]
+++++++++++++++++++++++++++++++++++++++++++
+本文作者:luyouqi233。 +
+欢迎访问我的博客:+
+++++++++++++++++++++++++++++++++++++++++++