串之next函數


//通過計算返回子串T的next數組
void get_next(String T, int next[])
{

  next[1] = 0;
  int m, j;

  m = 0;     //m=next[1],   m代表的是前綴結束時的下標,也就是相似度,是等價的  T1T2...Tm(m個字符)

     j = 1;       //j  代表的是后綴末尾的下標, Tj-m+1..Tj(m個字符)  其實j就是后綴的下標,而 ++j后 就是我們要求的next數組下標next[j]。
  
 
 while (j < T.length) 
    {    //這個if,我們只需要考慮,如果我<后綴最后下標>前面匹配成功,現在我T[j]==T[m]也匹配成功,那么我對應的 next[++j] 數組值是多少?
      if (m == 0 || T[m] == T[j]) //T[m]表示前綴的最末尾字符,T[j]是后綴的最末尾字符
      {
        ++m;
        ++j;
        next[j] = m;  //++j后獲取的才是我們要的next[j]下標,我們要獲取next[j]處的值; m++后的m才是我們想要給next[j]賦的值,前綴有m個字符,下輪j就要讓T(m+1)和Si比較。
      }
      else  //else是匹配失敗的情況,就要進行回溯
        m = next[m]; //若是字符不相同,則m回溯
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM