串之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