PHP前端开发

Python实现字符串的KMP算法

百变鹏仔 3小时前 #Python
文章标签 字符串

本文实例讲述了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;">