KMP匹配

参考书籍:严蔚敏版数据结构第4章。

建议啊:如果不懂KPM的原理,看了很多其他人的博客还是不是很懂,暂时就不要看了,直接看代码,根据代码来理解(搞技术对不对?又不是发表论文,非得有理论。),理解到那儿算那儿,时不时的看看,真的说不定那会儿就真的懂了。

说实话,其实我也没怎么懂/只能说多看代码吧,现在是似懂非懂。记录下来,多来看看,说不定就真的懂了。



两段代码:
其实第一段代码还是比较好理解的,就算不知道KPM怎么回事,单纯的看代码也大概了解。

void Next(char*T,int* next){
    int i=1;
    int j=0;
    next[1]=0;
    while(i<strlen(T)){
        if(j==0||T[i]==T[j]){
            ++i;
            ++j;
            T[i]=j;
        }else{
            j=next[j];
        }
    }
    
}

第二段代码不是那么好理解,中间又有一个if语句,我知道它为了避免“aaab”这样的字符串,但是呢反正得多看。可能才会理解吧。

void Next(char*T,int* next){
    int i=1;
    int j=0;
    next[1]=0;
    while(i<strlen(T)){
        if(j==0||T[i]==T[j]){
            ++i;
            ++j;
            if(T[i]!=T[j]){
                T[i]=j;
            }else{
                T[i]=T[j];
            }
            
        }else{
            j=next[j];
        }
    }
    
}

你可能感兴趣的:(c语言100题)