您的位置:首页 > 编程语言 > Python开发

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

2018-01-14 20:42 405 查看
基本思考

             已知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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息