学习完KMP算法才发现编程如此的奇妙 求next数组pythondef getNext(s): ''' 计算字符串的next数组 ''' length = len(s) next = [0 for i in range(length)] next[0] = -1 k = -1 j = 0 while j < length-1: # 这个 or 逻辑写的np if k == -1 or s[j] == s[k]: j += 1 k += 1 next[j] = k else: k = next[k] return next 从这张图可以看到整个的匹配过程,如果 $p_{k}$ 和 $p_{j}$ 匹配不上,那么就去看 $p_{next[k]}$ 和 $p_{j}$ 比如 Codep = "ABCDABD" 得到的结果就是 Code[-1, 0, 0, 0, 0, 1, 2] 细节感觉还是要靠自己体会 KMP算法pythondef KMP(s,p): next = getNext(p) m,n = 0,0 while m < len(s) and n < len(p): if n == -1 or p[n] == s[m]: n += 1 m += 1 else: n = next[n] if n == len(p): return True else: return False 从头开始匹配即可,遇到匹配不上的情况就返回到 next[k] 参考https://blog.csdn.net/v_JULY_v/article/details/7041827 Author: prontosilLink: https://prontosil.me/posts/9bd3a30d/Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.KMP微信扫一扫:分享微信里点“发现”,扫一下二维码便可将本文分享至朋友圈。Previous Postpyqt入门Next Post汇编从入门到入土七 Comment