Python - KMP算法
def kmp_match(tex, pat):
n = len(tex)
m = len(pat)
tex = '0' + tex
pat = '0' + pat
pi = []
pi.append(0)
pi.append(0)
p = 0
for i in range(2, m + 1):
while (p) and (pat[p + 1] != pat[i]):
p = pi[p]
if (pat[p + 1] == pat[i]):
p = p + 1
pi.append(p)
p = 0
for i in range(1, n + 1):
while (p) and (pat[p + 1] != tex[i]):
p = pi[p]
if (pat[p + 1] == tex[i]):
p = p + 1
if (p == m):
print i - m + 1
p = pi[p] tex = 'abbababbabbaaabaabb'
pat = 'aab'
kmp_match(tex, pat)
Python - KMP算法的更多相关文章
- python KMP算法介绍
- kmp算法python实现
kmp算法python实现 kmp算法 kmp算法用于字符串的模式匹配,也就是找到模式字符串在目标字符串的第一次出现的位置比如abababc那么bab在其位置1处,bc在其位置5处我们首先想到的最简单 ...
- 字符串匹配的kmp算法 及 python实现
一:背景 给定一个主串(以 S 代替)和模式串(以 P 代替),要求找出 P 在 S 中出现的位置,此即串的模式匹配问题. Knuth-Morris-Pratt 算法(简称 KMP)是解决这一问题的常 ...
- 字符串匹配算法之 kmp算法 (python版)
字符串匹配算法之 kmp算法 (python版) 1.什么是KMP算法 KMP是三位大牛:D.E.Knuth.J.H.MorriT和V.R.Pratt同时发现的.其中第一位就是<计算机程序设计艺 ...
- KMP算法-Python版
KMP算法-Python版 传统法: 从左到右一个个匹配,如果这个过程中有某个字符不匹配,就跳回去,将模式串向右移动一位.这有什么难的? 我们可以 ...
- Python 细聊从暴力(BF)字符串匹配算法到 KMP 算法之间的精妙变化
1. 字符串匹配算法 所谓字符串匹配算法,简单地说就是在一个目标字符串中查找是否存在另一个模式字符串.如在字符串 "ABCDEFG" 中查找是否存在 "EF" ...
- BF算法和KMP算法 python实现
BF算法 def Index(s1,s2,pos = 0): """ BF算法 """ i = pos j = 0 while(i < ...
- 扩展的KMP算法图解
扩展的KMP算法,可以在Ο(n + m)的时间复杂度内计算出模板串与文本串的每一个后缀的最长公共前缀,即LCP(T[i:n],P). KMP算法所解决的单模板字符串匹配问题,求得的匹配点是LCP = ...
- 字符串模式匹配算法系列(二):KMP算法
算法背景: KMP算法是由Donald Knuth和Vaughan Pratt于1970年共同提出的,而James H.Morris也几乎同时间独立提出了这个算法.因此人们将其称作“克努特-莫里斯-普 ...
随机推荐
- Visual Studio一秒变Node.js IDE
(此文章同时发表在本人微信公众号"dotNET每日精华文章") 上个月微软发布了一个插件,可以让Visual Studio一秒变身最强大的Node.js开发工具.现在源代码移到了G ...
- python logging用法
import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(line ...
- 【HTML5】Application Cache应用程序缓存
HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问. 应用程序缓存为应用带来三个优势: 离线浏览 - 用户可在应用离线时使用它们 速度 - 已缓存资源加载 ...
- AsyncTask下载网络图片
MyTask task = new MyTask(); task.execute(url); class MyTask extends AsyncTask<String, Integer, Bi ...
- python 把函数作为参数 ---高阶函数
把函数作为参数 在2.1小节中,我们讲了高阶函数的概念,并编写了一个简单的高阶函数: def add(x, y, f): return f(x) + f(y) 如果传入abs作为参数f的值: add( ...
- LightOJ1157 LCS Revisited(DP)
题目求两个字符串s1,s2不同的LCS个数. 经典的求LCS的DP是这样的: LCS[i][j]表示s1[0...i]和s2[0...j]的LCS LCS[i][j]从LCS[i-1][j-1]+1( ...
- C#中 As 和强制转换的总结
1.1.1 摘要 C#是一门强类型语言,一般情况下,我们最好避免将一个类型强制转换为其他类型,但有些时候难免要进行类型转换. 先想想究竟哪些操作可以进行类型转换(先不考虑.NET提供的Parse),一 ...
- ubuntu桌面进不去,我跪了
ubuntu12.04 输入密码正确,但仍然跳回到登陆界面,实在受不了啊! 不知道bug再哪里,但是有个方法真是屡试不爽啊.. ctrl+alt+f1切换到字符界面 /home/xxx/.Xautho ...
- LA 3415 (二分图+最大独立集)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- WP7.1 应用程序发布到Marketplace
从8月22起Windows Phone marketplace可以提交7.1 sdk开发的应用了,尽管提交页面和方式与7.0是同一个,但是还是会出现一些问题.并且在提交之前也注意一些问题. 7.0 应 ...