字符串模式匹配之KMP算法

2019-11-30 01:13:49阅读 133评论 0

概述

字符串匹配算法有BF算法,和KMP算法。BF算法原理简单,但耗费性能,事间复杂度为O(mn)。而KMP算法原理相对复杂,但效率很高,时间复杂度为O(m+n)。

其中m,n代表被匹配字符串和匹配字符串的长度

KMP算法原理

将匹配字符串求出一个next数组,每一个匹配字符对应next数组中一个值。在匹配时,遇到不匹配的字符,查出对应的next值,决定从匹配字符串的对应位置继续进行匹配。

代码实现(python)

    def get_next(T,next):  
        #计算匹配字符串内各个字符对应的值,并放入next数组中  
        i,j=0,-1  
        next[0]=-1  
        while i<len(T):  
            if j==-1 or T[i]==T[j]:  
                i+=1  
                j+=1  
                if i<len(T):  
                    next[i]=j  
            else:  
                j=next[j]  


    def kmp(S,T):  
        length=len(T)  
        next=[0]*length  

        get_next(T,next)#获取next  
        print("next为:",next)  

        i,j=0,0  
        while i<len(S) and j<len(T):  
            if j==0 or S[i]==T[j]:  
                i+=1  
                j+=1  
            else:  
                j=next[j]  
        if j>=len(T):  
            print("匹配成功,匹配到的位置为:",i-j)  
            return i-j  
        else:  
            print("匹配失败")  
            return 0  


    kmp("abcabaabacabcd","abcd")

还没有评论,来说两句吧