KMP算法python实现

本文深入探讨了KMP算法的原理与应用,通过详细的代码示例解释了如何使用KMP算法进行字符串匹配。KMP算法是一种高效的字符串搜索算法,避免了传统方法中的大量重复比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#File Name : KMP算法.py

def getIndexOf(str1,str2):
    #判断,str2是否在str1中
    def getNextArray(strS):
        #用于返回strS中 每个位置匹配度的数组
        if len(strS) == 1:
            return [-1]
        nextArr = [0 for i in range(len(strS))]
        nextArr[0] = -1
        nextArr[1] = 0
        pos = 2
        cn = 0
        while pos < len(strS):
            if strS[pos-1] == strS[cn]:
                nextArr[pos] = cn+1
                pos+=1
                cn+=1
            elif cn==0:
                nextArr[pos] = 0
                pos+=1
            else:
                cn = nextArr[cn]
        return nextArr

    if str1==None or str2==None or len(str2)<1 or len(str1)<len(str2):
        return -1
    nextArr = getNextArray(str2)
    i1 = 0
    i2 = 0
    while i1<len(str1) and i2<len(str2):
        if str1[i1]==str2[i2]:
            i1+=1
            i2+=1
        #说明 i2=0 此时连第一个都对不上
        elif nextArr[i2] == -1:
            i1+=1
        else:
            i2 = nextArr[i2]

    return -1 if i2 != len(str2) else i1-i2

a = 'efabcabcd'
b = 'abcabc'

print(getIndexOf(a,b))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值