KMP算法(Python)

起因

在牛客上做了一道KMP算法的题,按照我之前学习的代码进行计算发现结果是错误的,为了避免以后再次出现这样的问题,先把代码放上去,关于算法的设计以后看看再补上去。

后续

之前的代码并不是错误的,是因为答案中next数组的主程序和我之前代码的主程序不一样
我求的是next数组,并不是最长公共前缀后缀。下面的代码求得是next数组,例如

字符串abab
next数组-1001
公共前缀后缀数组0012

next数组代码

def Next(T):
    i,j=0,-1
    next=[-1]*len(T)
    while i<len(T)-1:
        if j==-1 or T[i]==T[j]:
            i+=1
            j+=1
            next[i]=(j)
        else:
            j=next[j]
    return next

print(Next('ababaaababaa'))

我们有了next数组,就可以写主程序进行匹配了.

def match(P,T):
	i,j=0,0
    next=Next(P)
    while i<len(P):
    	#print(i,j)
        if j==-1 or P[i]==T[j]:
	        i+=1
        	j+=1
        else:
                #i+=1
        	j=j-next[j]
        if j==len(T):return 1
   return 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值