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

猜你喜欢

转载自blog.csdn.net/thelostmathematician/article/details/79059028
今日推荐