Python实现字符串的KMP算法
本文实例讲述了Python实现字符串的KMP算法。分享给大家供大家参考,具体如下:
KMP算法Python实现
今天研究KMP算法,看来很多版本,有不同的语言写的,但是感觉越看越乱,最后自己试着写一份进行总结首先,kmp算法使字符串匹配中的优化算法,使原来的o(m*n)降到了o(m+n)
关于他的理解,我推荐先看视频,他讲的很清楚了。汪都能听懂的KMP字符串匹配算法
然后从可视化方面理解,推荐看看如何更好的理解和掌握 KMP 算法? - 佑子的回答 - 知乎容
最后从代码层理解Searching for Patterns | Set 2 (KMP Algorithm)
代码不要看太多别人的,我感觉好多人写的也有问题,我在自己运行处问题时,有看有些同学写的,被带到其他坑里了。。。
最后记录代码
'''先求next数组'''def next_list(pattern): next=[] pattern_list=list(pattern) j=0 i=1 for s in range(len(pattern)): #第一位一直是0 if s==0: next.append(0) #看第i个和第j个字母是否相同,如果相同,则累加 #同时i,j同时右移 elif(pattern_list[i]==pattern_list[j]): next.append(j+1) j+=1 i+=1 #如果不相同,则next为0,同时j也退回第一个位置,i继续前进一个位置 else: next.append(0) j=0 i=s+1 print(next) return nextnext_list('ABABCABAB') def kmp(text,pattern): #text的位置 i=0 #pattern的位置 j=0 next=next_list(pattern) if(not(text and pattern)): print('字符串为空,请输入字符串') elif(len(text)<len><p> </p><p><span style="font-size: 16px;">