gpt4 book ai didi

Python实现字符串匹配的KMP算法

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python实现字符串匹配的KMP算法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

kmp算法 。

kmp算法是一种改进的字符串匹配算法,由d.e.knuth,j.h.morris和v.r.pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称kmp算法)。kmp算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#! /usr/bin/python
# coding=utf-8
"""
基于这篇文章的python实现
http://blog.sae.sina.com.cn/archives/307
"""
import unittest
def pmt(s):
   """
   partialmatchtable
   """
   prefix = [s[:i + 1 ] for i in range ( len (s) - 1 )]
   postfix = [s[i + 1 :] for i in range ( len (s) - 1 )]
   intersection = list ( set (prefix) & set (postfix))
   if intersection:
     return len (intersection[ 0 ])
   return 0
def kmp(big,small):
   i = 0
   while i < len (big) - len (small) + 1 :
     match = true
     for j in range ( len (small)):
       if big[i + j] ! = small[j]:
         match = false
         break
     if match:
       return true
     #移动位数 = 已匹配的字符数 – 对应的部分匹配值
     if j:
       i + = j - pmt(small[:j])
     else :
       i + = 1
   return false
class kmptests(unittest.testcase):
   def test_pmt( self ):
     self .assertequal(pmt( "a" ), 0 )
     self .assertequal(pmt( "ab" ), 0 )
     self .assertequal(pmt( "abc" ), 0 )
     self .assertequal(pmt( "abcd" ), 0 )
     self .assertequal(pmt( "abcda" ), 1 )
     self .assertequal(pmt( "abcdab" ), 2 )
     self .assertequal(pmt( "abcdabd" ), 0 )
     self .assertequal(pmt( "aaaaaa" ), 5 )
   def test_kmp( self ):
     self .asserttrue(kmp( "abcd" , "cd" ))
     self .assertfalse(kmp( "abcd" , "bd" ))
     self .asserttrue(kmp( "bbc abcdab abcdabcdabde" , "abcdabd" ))
if __name__ = = '__main__' :
   unittest.main()

总结 。

以上所述是小编给大家介绍的python实现字符串匹配的kmp算法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。

原文链接:https://www.cnblogs.com/goodspeed/p/3295456.html 。

最后此篇关于Python实现字符串匹配的KMP算法的文章就讲到这里了,如果你想了解更多关于Python实现字符串匹配的KMP算法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com