1. 程式人生 > >字串匹配(字尾陣列)

字串匹配(字尾陣列)

假設已經求出字串S的字尾陣列點選開啟連結,現在要求字串T在字串S中出現的位置,只要通過二分搜尋就可以在O(T*logS)時間內完成。當S比較大時,比O(T+S)的演算法更為高效,所以需要對同樣的字串做多次匹配時,該演算法更有優勢。

程式碼:

bool contain(string S,int *sa,string T)
{
        int a=0,b=S.length();
        while(b-a>1)
        {
               int c=(a+b)/2;
               //比較S從位置sa[c]開始長度為T的子串與T
              if(S.compare(sa[c],T.length(),T)<0)    a=c;
              else b=c;
        }
      
        return S.compare(sa[b],T.length(),T)==0;
}