KMP算法,字符串、序列匹配位置的查找

KMP算法是一种高效的字符串匹配算法,通过避免不必要的比较提高查找效率。文章介绍了该算法的基本原理,并给出了Python代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

KMP算法是一个设计精巧的匹配查找算法,用于查找2个字符串或者序列,一个(小的)在另一个(大的)中最佳匹配位置。算法的核心思想是跳过一些已经确定不会匹配的部分。
python实现如下:

#:KMP字符串匹配算法
def KMP(bigStr:str, smallStr:str, all = False)->(list,bool, int):
    '''
    KMP算法,用于查找后字符串在前面字符串的匹配位置。
    :param bigStr: 包含的字符串
    :param smallStr: 要检测是否含有的字串
    :param all: 是否要找到所有的位置。默认为false
    :return: 匹配(或最佳匹配)的位置的列表,从0开始,-1为完全没有找到。
        bool变量是否是精确匹配。最后第三个返回值是匹配的长度。
    '''
    def cal_next(string:str)->np.ndarray:
        '''
        KMP算法所需要的子函数
        :param string:
        :return:
        '''
        k = -1
        length = len(string)
        nextArr = -np.ones(length,dtype=int) #全赋值为-1,不过算法里只要【0】赋值为-1即可
        for qq in range(1,length):
            while string[k + 1] != string[qq] and k>-1: 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值