基于后缀数组的字符串匹配
计算得到文本串\(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;
}