Python如何实现字符串匹配的公里算法

  介绍

这篇文章主要介绍了Python如何实现字符串匹配的公里算法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

<强>公里算法

公里算法是一种改进的字符串匹配算法,由D.E.Knuth, J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特-莫里斯-普拉特操作(简称公里算法).KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个未来()函数,函数本身包含了模式串的局部匹配信息。

# !/usr/bin/Python   #=utf - 8编码   “““   基于这篇文章的python实现   http://blog.sae.sina.com.cn/archives/307   “““   import  unittest   def  pmt (s):   “才能”;“   PartialMatchTable才能   “才能”;“   prefix 才能=,[s [: i + 1], for 小姐:拷贝范围(len (s) 1)]   postfix 才能=,[s [i + 1:], for 小姐:拷贝范围(len (s) 1)]   intersection 才能=,列表(设置(前缀),,,设置(后缀))   if 才能;交叉:   ,,,return  len(路口[0])   ,return  0   def 公里(大,小):   小姐:才能=0   while 才能小姐:& lt;, len(大),背后,len(小),+,1:   ,,,match =,真的   ,,,for  j 拷贝范围(len(小)):   ,,,,,if 大(i + j), !=,小[j]:,   ,,,,,,,match =False   ,,,,,,,休息   ,,,if 匹配:   ,,,,,return 真实的   ,,,#移动位数,=,已匹配的字符数,安康;对应的部分匹配值   ,,,if  j:   ,,,,,小姐:+=,j 作用;pmt(小[j]):   ,,,:   ,,,,,小姐:+=1   return 才能;错误的   class  kmpTests (unittest.TestCase):   def 才能test_pmt(自我):   ,,,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.assertTrue(公里(“ABCD",“CD"))   ,,,self.assertFalse(公里(“ABCD",“BD"))   ,,,self.assertTrue(公里(“BBC  ABCDAB  ABCDABCDABDE",“ABCDABD"))   if  __name__ ==, & # 39; __main__ # 39;:   unittest.main才能()

感谢你能够认真阅读完这篇文章,希望小编分享的“Python如何实现字符串匹配的公里算法”这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

Python如何实现字符串匹配的公里算法