python字符串匹配实现的另类想法

基本思考

             已知KMP算法目标串指针的不回溯,能不能利用这个想法开发出其他的不回溯解决方案呢?

           考虑这样一种匹配方法:从模式串的第0位开始,如能与目标串对应位置匹配那模式串增加一位并且目标串增加一位,这点大家都明白。接着遇到第一个不匹配的,此时目标串指针不回溯,模式串指针也不回溯。把模式串像右移动一位,相当于把模式串当前指针与目标串下一个匹配,依此类推。当模式串最后一位与目标串匹配时,我们再回过头来从模式串的第0位开始补完前面的匹配。此算法难点在记录模式串匹配指针的最后起始位置,我花了一个多小时写下以上想法的实现算法,可能比较抽象。

def match(pattern,text):
    n=len(pattern)
    m=len(text)
    i,j,k=0,0,0
    while j<=n and i<m:
        if text[i]==pattern[j]:
            i+=1
            j+=1
            if j==n:      #匹配到最后时,跳回第0位
                i=i-j
                j=0
                while j<k:
                    if text[i]==pattern[j]:
                        i+=1
                        j+=1
                    else:
                        i+=1
                if j==k:
                    return i-k
        else:
            i+=1
            k=j          #记录指针最后不匹配位置
    return -1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值