基于后缀数组的字符串匹配

计算得到文本串\(S\)的后缀数组,给出模式串\(P\),可以通过二分,在\(O(|T|\log |S|)\)的时间复杂度内判断模式串是否在文本串中出现过

bool contain(string text,string pattern){
    int n=text.length();
    int m=pattern.length();
    int l=0,r=n;
    while(r>l){
        int mid=(l+r)>>1;
        if(text.compare(sa[mid],m,pattern)>=0){
            r=mid;
        }
        else l=mid+1;
    }
    return text.compare(sa[r],m,pattern)==0;
}
posted @ 2020-08-12 18:38  fxq1304  阅读(112)  评论(0编辑  收藏  举报