KMP算法

作者: poteman | 来源:发表于2019-07-04 16:21 被阅读0次
    def KMP(s, p):
        nex = getNext(p)
        i, j = 0, 0  # 分别是s和p的指针
        while i < len(s) and j < len(p):
            if j == -1 or s[i] == p[j]:  # j==-1是由于j=next[j]产生
                i += 1
                j += 1
            else:
                j = nex[j]
    
        if j == len(p):  # 匹配到了
            return i - j
        else:
            return -1
    
    def getNext(p):
        nex = [0] * len(p)
        nex[0] = -1
        i = 0
        j = -1
        while i < len(p) - 1:  # len(p)-1防止越界,因为nex前面插入了-1
            if j == -1 or p[i] == p[j]:
                i += 1
                j += 1
                nex[i] = j  # 这是最大的不同:记录next[i]
            else:
                j = nex[j]
    
        return nex
    

    相关文章

      网友评论

        本文标题:KMP算法

        本文链接:https://www.haomeiwen.com/subject/znsrhctx.html