目录
一、学习视频
二、跟练代码
主要是想起到一个记录的作用
一、学习视频
【最浅显易懂的 KMP 算法讲解】 https://www.bilibili.com/video/BV1AY4y157yL/?share_source=copy_web&vd_source=dc0e55cfae3b304619670a78444fd795
二、跟练代码
代码来自视频
# KMP算法
def build_next(patt):# 计算next数组# 是关于子串的,输入子串next = [0] # 注意初始化,第一个肯定为0prefix_len = 0 # 当前 共同前后缀的长度n = len(patt)i = 1while i < n:# 匹配if patt[prefix_len] == patt[i]:prefix_len += 1next.append(prefix_len)i += 1# 不匹配else:if prefix_len == 0:next.append(0)i += 1else:# 查看已匹配中是否存在更短的前后缀# 找到前一位置的next值,跳转,i不变prefix_len = next[prefix_len - 1]return nextdef kmp_search(string, patt):next = build_next(patt)i, string_len = 0, len(string) # 主串j, patt_len = 0, len(patt) # 子串while i < string_len:if string[i] == patt[j]:i += 1j += 1elif j > 0:j = next[j - 1]else:i += 1if j == patt_len:return i - j # 返回起始位置
完
感谢你看到这里!一起加油吧!