浅谈kmp算法

                              kmp算法我刚开始学习的时候,是为了查找字符串的时候节省时间。在一个很长的字符串中,查找一个很长的字符串kmp算法可以节省大量的时间。

      

        如果使用暴力的话第一次查找到s【4】下次还要从s【1】开始查找,kmp算法是从s【4】继续往下查找

        kmp算法的核心是求解next【】的值。next【】就是直接从s【5】往下查找的核心。

        T字符串的next【】代表的是什么?应该怎么求?我迷惑的半年多,突然想通了,感觉这就是kmp算法的核心。

   

        next[j]=k    意义:模式串T中下标为j的字符,如果j的前面k个字符与开头的k个字符相等。

     next【0】=-1是人为规定。

    为什么有了next就可以从s【5】直接往下探查了呢。nxet【5】等于5代表s【3】和T【0】,s【4】和T【1】相同可以直接让s【5】和T【2】相比较。理解的next【】的用法,就基本kmp算法入门了

对字符串s=“aaaab”取next[].next[i]=j代表的是s[i]前面有j个字母和s[j]前面的j个字母完全重合
     i 0 1 2 3 4 5
     s a a a a b
next  -1 0 1 2 3 0
next[3]=2 就代表s[3]前两个字母aa和s[2]前两个字母aa完全重合

图片参考:http://www.cppblog.com/oosky/archive/2006/07/06/9486.html 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值