KMP模式匹配算法

本文介绍了KMP算法,一种高效的字符串匹配算法。相对于朴素的BF算法,KMP通过next[]数组避免了不必要的字符回溯,降低了时间复杂度。文章详细讲解了next[]数组的定义和计算方法,包括递推和直接求解两种策略。
摘要由CSDN通过智能技术生成

一、定义

       字符串序列:所谓序列说明串的相邻两字符之间具有前驱和后继的关系。

       子串与主串:串中连续字符组成的子序列称为该串的子串,包含子串的串称为主串。子串在主串中的位置就是子串的第一个字符在主串中的序号。

       ASCII与Unicode编码:以前计算机使用标准的ASCII编码(7位二进制表示128个字符),后来发现一些特殊符号的出现,128个不够用,于是扩展ASCII码由8位二进制(表示256个字符)数表示,可是还有其他国家的字符需要编码,于是Unicode编码采用16位二进制数(6.5万多个字符),足够表示世界上所有语言字符,为了兼容ASCII码,Unicode的前256个字符与ASCII码完全相同。

       串与线性表:线性表更关注的是单个元素的操作:查找插入删除;串中更多的是查找子串位置,得到指定位置子串、替换子串等操作。

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

二、BF算法

    BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。

    举例说明:

    S:  ababcababa

    P:  ababa

  BF算法匹配的步骤如下

           i=0                                   i=1                             i=2                         i=3                          i=4

  第一趟:ababcababa         第二趟:ababcababa      第三趟:ababcababa    第四趟:ababcababa    第五趟:ababcababa

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值