关于 height 数组
查看原帖
关于 height 数组
420129
Nt_Tsumiki楼主2024/5/15 21:57

用的 sais

照着 oi-wiki 上敲得,#5 过不去,下完数据后发现是 height 求错了

void init(char *s,int len,int sigma) {
    int *LMS=new int[len];
    sais(s,len+1,LMS,sigma);
    delete[] LMS;
    for (int i=0;i<len;i++) sa[i]=sa[i+1];
    for (int i=0;i<len;i++) rk[sa[i]]=i;
    for (int i=0,k=0;i<len;i++) {
        if (!rk[i]) continue;
        if (k) --k;
        while (s[i+k]==s[sa[rk[i]-1]+k]) ++k;
        h[rk[i]]=k;
        st[rk[i]][0]=k;
    }
    for (int j=1;j<26;j++)
        for (int i=0;i+(1<<j)-1<len;i++) st[i][j]=min(st[i][j-1],st[i+(1<<(j-1))][j-1]);
}
2024/5/15 21:57
加载中...