KMP算法next值求解

KMP算法next值求解
最近在看软件设计师教程,其中有一个KMP算法,让求出其next值。书上和网上给出的好多都是别人优化过的算法代码,看起来比较恶心,(不过人家那短短几行代码,却实现了这样一个算法,实在是佩服!!!)网上看了好多别人写的KMP算法中next值得求解,好多都是讲原理的,理解起来比较费时,此文仅献给那些快要考试的孩纸们~

用例子说话:

求子串: a b a a b c a c的next值

位置: 0 1 2 3 4 5 6 7

子串: a b a a b c a c

next值: 0 1 1 2 2 3 1 2

首先前两位一定为0和1接下来看后面几位

第三位(a):看第二位next值是1,将第二位的b与第一位a相比,不同,则为1(如果相同,则为第二位的next值+1)

第四位(a):看第三位next值是1,将第三位的a与第一位的a相比,相同,则为第三位的next值+1=2

第五位(b):看第四位next值是2,将第四位的a与第二位的b相比,不同,而第二位的next值是1,再将第四位的a与第一位的a相比,相同,将第二位的next值+1=2

第六位(c):看第五位的next值是2,则将第五位的b与第二位的b相比,相同,则将第五位的next值+1=3

第七位(a):看第六位的next值是3,将第六位的c与第三位的a相比,不同,而第三位的next值是1,则将第六位的c与第一位的a相比,不同,为1(如果第六位与第一位相比,相同的情况下,第七位的next值应该是第三位的next值+1=2)

第八位(c):看第七位的next值是1,将第七位的a与第一位的a相比,相同,则将第七位的next值+1=2

自己研究了半天,到最后代码也记住了,这里附上恶心的代码(next)~~~

void Get_next(char *p, int next[]){

     int  i , j , slen;

     slen = strlen(p);

     i= 0;

     next[0] = -1;

     j = -1;

     while(i <slen){

               if(j == -1 || p[i] == p[j]) {

                        ++i ;

                        ++j ;

                        Next [i]=j ;

               }else{

                        J = next[j] ;

               }

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值