数据结构之串(KMP算法)

1 定义

        字符串是由0个或多个字符组成的有限序列,是一种特殊的线性表,数据元素之间呈现线性关系。

2 字符串匹配

        字符串匹配时可以采取常规的一个个对比移位匹配,也可以采用KMP算法进行匹配。

3 KMP算法

        相比于传统移位匹配的方法,KMP算法在匹配失败时,不再进行移位重头开始匹配,而是会跳转到前一位标记的下标处开始进行匹配,从而减少匹配次数。

        通常会采用一个next数组来表示不匹配时,应该回退到那个地方。

  

具体代码如下所示:

s = 'aabaabaaf'
next = [0]*len(s)
j,i = 0,1
while i<len(s):
    while j>0 and s[j]!=s[i]:
        j = next[j-1]
    if s[j]==s[i]:
        j+=1
    next[i]=j
    i+=1
print(next)
#[0, 1, 0, 1, 2, 3, 4, 5, 0]

备注:next数组可能有多种表达方式,有的可能会将其整体右移移位,next[0]初始为-1,有的可能则是全体减1,具体情况需具体分析。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值