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有什么好的微信公众号(python下载微信公众号相关文章)
- python 链表操作(Python3实现的判断环形链表算法示例)
- python处理tcp包(Python3使用TCP编写一个简易的文件下载器功能)
- python3简单编程(Python3.5面向对象编程图文与实例详解)
- python浪漫表白源码(python七夕浪漫表白源码)
- python中可以改变的数据类型(Python常见数据类型转换操作示例)
- python 组合数据类型(详解Python3 对象组合zip和回退方式*zip)
- python装饰器初学者教程(Python3.5装饰器原理及应用实例详解)
- python发送微信消息脚本(python实现给微信指定好友定时发送消息)
- pythonjpg转pdf格式(Python使用到第三方库PyMuPDF图片与pdf相互转换)
- python排序的三种方法(Python实现插入排序和选择排序的方法)
- pythoncsv格式转换(Python把对应格式的csv文件转换成字典类型存储脚本的方法)
- python人脸识别实战视频(Python学习笔记之图片人脸检测识别实例教程)
- 怎么python爬取网页图片(详解Python静态网页爬取获取高清壁纸)
- python对列表排序(Python实现对特定列表进行从小到大排序操作示例)
- python列表的循环遍历使用教程(Python中使用遍历在列表中添加字典遇到的坑)
- 小米音乐可绑定QQ音乐, QQ音乐 真的会消失在小米的设备上吗(小米音乐可绑定QQ音乐)
- 小米Watch S1评测 或许能成为小米冲击高端可穿戴设备的里程碑(小米WatchS1评测或许能成为小米冲击高端可穿戴设备的里程碑)
- 手机QQ与小米路由器在一起 明天揭晓,敬请期待(手机QQ与小米路由器在一起)
- 小米音乐与 QQ 音乐合作,便捷迁移会员(小米音乐与QQ音乐合作)
- 小米推出米兔儿童电话手表奥特曼版,799 元,支持微信 QQ(小米推出米兔儿童电话手表奥特曼版)
- 贾怀胤唱《白龙马》 炸场 了 没想到京剧还能这么玩(贾怀胤唱白龙马)
热门推荐
- 云服务器与服务器的区别(云服务器与网站空间区别在于什么)
- php哪个函数具有字符串截取功能(php字符串截取函数mb_substr用法实例分析)
- css浮动小例子教程(使用css transition属性实现一个带动画显隐的微信小程序部件)
- canvas绘制分辨率(通过canvas转换颜色为RGBA格式及性能问题的解决)
- web服务器搭建自己的网站(单台web服务器如何尽可能的提高网站性能)
- Linux 下如何检查内存使用率(Linux 下如何检查内存使用率)
- 100道python真实面试题附答案(值得收藏的10道python 面试题)
- html5可以做语音聊天吗(基于Html5实现的语音搜索功能)
- 如何用python在微信里自动回复(Python实现微信自动好友验证,自动回复,发送群聊链接方法)
- 入门云主机推荐(怎么样购买到心仪又便宜的云主机?)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9