KMP算法详解(与最长公共子序列)

本文详细介绍了KMP算法,指出它与BF算法的区别在于消除了指针i的回溯,通过next数组提高了匹配效率。KMP算法利用前缀函数避免不必要的检测,并给出了部分匹配表的生成及代码实现。同时,文章还提及了最长公共子序列的概念和其与子串的不同。
摘要由CSDN通过智能技术生成

一:在介绍KMP算法之前,先介绍一下BF算法

(1)BF算法(传统的匹配算法,也是最简单的算法)

 BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。
   
(2)举例说明:
    S:  ababcababa
    P:  ababa
  BF算法匹配的步骤如下
           i=0                  i=1                       i=2                 i=3                   i=4
  第一趟:ababcababa         第二趟:ababcababa      第三趟:ababcababa    第四趟:ababcababa    第五趟:ababcababa
    ababa                         ababa                 ababa                 ababa                   ababa
    j=0                           j=1                   j=2                   j=3                     j=4(i和j回溯)

    i=1                           i=2                   i=3                   i=4                     i=3  
 第六趟:ababcababa         第七趟:ababcababa       第八趟:ababcababa     第九趟:ababcababa   第十趟:ababcababa
    ababa                   ababa                        ababa               ababa                   ababa
    j=0                     j=0                          j=1                 j=2(i和j回溯)           j=0

    i=4                     i=5                          i=6                 i=7                     i=8
第十一趟:ababcababa       第十二趟:ababcababa    第十三趟:ababcababa   第十四趟:ababcababa   第十五趟:ababcaba
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值