后缀数组

当我们事先知道一个很大的文本串,要在这个文本串里面找若干个字符串,此时用kmp或者ac自动机都会导致时间复杂度过高,所以我们需要预先处理文本串。这时候,我们可以用后缀树。我们这里介绍后缀数组的组建。
    直接上代码,如果不知道什么是后缀数组,请问度娘。
void doit()
 
  {
  int i,j,k,l;
  n=strlen(s);
  for(i=1;i<=n;i++)
  t[s[i-1]]=1;
  int maxt=0;
    for(i=1;i<=node;i++)
  maxt =max(maxt, t[i]+=t[i-1]);
        memset(t2,0,sizeof(t2));
for(i=0;i
  t2[i]=t[s[i]];
  j=0;
  if(maxt>10)
      maxt=100;
  else 
      maxt=10;
  for(k=1;k<=n;k<<=1)
    {
        j++;
      memset(t,0,sizeof(t));
        for(i=0;i
          if(i+j
            t2[i]=t2[i]*maxt+t2[i+j];
        else 
            t2[i]=t2[i]*maxt;
        for(i=1;i<=n;i++)
            t[t2[i-1]]=1;
            for(i=0;i<=node;i++)
            t[i]+=t[i-1];
      for(i=0;i
            t3[i]=t[t2[i]];
  for(i=0;i
        t2[i]=t3[i];
}
for(i=0;i
            as[t3[i]]=i;
         
  }

ps:本人是蒟蒻,如果有错误欢迎指出,请轻喷

你可能感兴趣的:(后缀数组)