KMP算法关于next数组详解

j 1 2 3 4 5 6 7
a b c a b c d
next[j] 0 1 1 1 2 3 4

要求j=7的时候,next数组为多少,j=7的时候,就是看i=6的时候前缀和后缀的关系(因为求7的时候,和7没有关系,和7的前面有关系)

当i=6的时候,j=3,KMP(看门牌算法)

就看j=3和j=6对应的两个字符相不相等,相等,就j+1,就是next[7],如果不相等,就继续看3对应的相不相等。

因为KMP算法关于next数组详解_第1张图片

j=6的next为3,则红色标注的两个字符一定相等,如果j=6和j=3两个字符再对应相等的话,就绿色标注的也相等,依此类推。

void get_next(SString,int &next[])
{
    i=1;next[1]=0;j=0;
    while(i

 

你可能感兴趣的:(算法)