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];
        }
    }
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值