KMP算法中next数组的理解-python

本文详细解析了KMP算法中next数组的概念和构建过程,解释了next[j]如何表示模式串的最长公共前后缀,并通过实例分析了next[j+1]的计算方法,包括相等和不等字符的情况。同时,提供了Python实现KMP算法的完整代码。

KMP算法解决了在字符串匹配过程中模式串指针回溯的问题,从而提高了字符串匹配效率。KMP具体细节在这里不展开讲,主要是梳理一下对KMP核心next数组的理解,要注意的是:目前网上有很多种版本的KMP算法,其next数组的定义也完全不同,因此,在学习KMP算法的时候,要先明确next数组的定义。

在本文中next[j]存放的是模式串P中P[0]到P[j-1]这个子串中,最长公共前缀和后缀的长度。

def get_next(substring):
    next = [-1]
    i = 0
    j = -1
    while i < len(substring)-1:
        if j == -1 or substring[i] == substring[j]:
            i += 1 
            j += 1
            next.append(j)
        else:
            j = next[j]
    return next

以上是next数组的构建代码,当时在学习KMP算法时,对下面这一操作不太理解,即当前后缀失配时,为何要按照此操作进行回退?

j = next[j]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值