模式匹配BF、KMP、BM、Sunday

BF模式匹配

参考介绍

最好情况的复杂度为O(n+m);最坏情况的复杂度为O(n*m)

def strmatch(a,b):
    for i in range(len(a)):
        if len(a)

KMP模式匹配

参考介绍 学习视频

def dpnext(pat):
    dp=[0 for _ in range(len(pat))]
    for i in range(1,len(pat)):
        '''
        细节操作,dp[i]的值代表的其实就是从开头有dp[i]个字符和最后的dp[i]个字符一致
        如果要比较的话,其实就可以直接比较第i个字符与第dp[i-1]个字符是否相等,如果相等
        那么dp[i]=dp[i-1]+1;不等的话也有两种情况,如果首位相等则店铺dp[i]=1
        否则的话就为0,而初始化的过程中就直接全部赋0,所以不用操作
        '''
        if pat[i]==pat[dp[i-1]]:
            dp[i]=dp[i-1]+1
        elif pat[i]==pat[0]:
            dp[i]=1
    dp.insert(0,-1)
    return dp[:-1]

def kmp(str,pat):
    next = dpnext(pat)
    i,j = 0,0
    while(i

BM模式匹配

参考介绍   

 

Sunday 算法

参考介绍

 

参考文献:

BF算法

KMP算法

BM算法

Sunday 算法

https://zhuanlan.zhihu.com/p/74885159

你可能感兴趣的:(coding)