python字符串相似度匹配(Python实现字符串匹配的KMP算法)
类别:脚本大全 浏览量:352
时间:2021-10-26 11:22:36 python字符串相似度匹配
Python实现字符串匹配的KMP算法kmp算法
kmp算法是一种改进的字符串匹配算法,由d.e.knuth,j.h.morris和v.r.pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称kmp算法)。kmp算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。
|
#! /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 excel 合并表格(Python实现合并excel表格的方法分析)
- python获取特定时间日期的数据(Python提取特定时间段内数据的方法实例)
- linux查python进程(linux查找当前python解释器的位置方法)
- python3.8基本操作(Python3.5文件修改操作实例分析)
- python爬取在线评论(Python爬虫实现爬取百度百科词条功能实例)
- python 常用爬虫库(Python常用爬虫代码总结方便查询)
- python获取网关ip地址(python实现扫描局域网指定网段ip的方法)
- python 时间戳转化为格式(Python datetime和unix时间戳之间相互转换的讲解)
- python对列表排序(Python实现对特定列表进行从小到大排序操作示例)
- pythonftp功能介绍(使用Python操作FTP实现上传和下载的方法)
- python单例编程(浅谈Python反射 & 单例模式)
- python创建hbase命名空间(python使用phoenixdb操作hbase的方法示例)
- pythonflask系列教程(Python安装Flask环境及简单应用示例)
- python单例模式读取配置文件(Python下简易的单例模式详解)
- python加密和解密(python实现对输入的密文加密)
- python语言支持多态(Python实现多态、协议和鸭子类型的代码详解)
- 《囧妈》为何受抵制 春节七部影片撤档背后的责任与博弈(囧妈为何受抵制)
- 提醒 2019年起河南驾考要开设科目五 官方回应来了(2019年起河南驾考要开设科目五)
- 省 市书法家协会 送万福进万家 活动走进禹州美丽乡村(省市书法家协会)
- 点赞 禹州苌庄正式撤乡建镇 未来发展不可估量(禹州苌庄正式撤乡建镇)
- 它荣获 中国生态魅力镇 称号 就在咱们禹州,一起来看看(中国生态魅力镇)
- 真牛 禹州将建成中等城市(禹州将建成中等城市)
热门推荐
- Visual Studio代码缩略图
- pythonflask编写接口(Python Flask框架模板操作实例分析)
- vue怎么注册公共组件(解读Vue组件注册方式)
- apache静态化怎么用(apache中访问不了伪静态页面的解决方法)
- ExtJs中getCmp、getDom、Get的区别
- css定位布局讲解(css position定位属性_动力节点Java学院整理)
- laravel队列过期时间(laravel 修改记住我功能的cookie保存时间的方法)
- centos搭建sftp服务器(Linux云服务器搭建SFTP服务器图片服务器的操作)
- vue项目有element插件(Vue Element前端应用开发之前端API接口的封装)
- 微信小程序图片加特效(微信小程序实现可实时改变转速的css3旋转动画实例代码)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9