B-F 字符串匹配算法
Brute-Froce 算法是串的匹配模式算法中的一种
其匹配方式如下:
1、设有字符串 a ,b;a为主串,在 a 中查找 b 串的位置
2、匹配方式如下:
2.1:
分别从 a,b串的第一个元素开始比较a,b 中每个元素是否相等。如果相等,那么比较a,b各自的下一个元素。直到a,b中出现了某个元素不相等(或者是a或者b中所有的元素都比较了一个遍,这种情况一会说)。那么:
2.2:
从a中的第二个字符和b中的第一个字符开始比较,看是否相等,如果相等,那么顺序比较a,b中各自后面的元素。直到出现了不相等(或者是a或者b中所有的元素都比较了一个遍,这种情况一会说):
2.3:
重复2.2,从a中的第三个开始和b中的第一个元素开始比较。。。。。。直到出现了不相等。 一直重复以上过程,直到:
3.1 b中所有元素都比较完了:
这说明,找到了b在a中的位置
3.2 a中所有的元素都比较完了:
这说明,a中不含有b 图示如下: 开始查找

a[i] != b[j] 出现了不匹配的元素
从a 的第二个元素开始和b的第一个元素开始匹配

a[i] != b[j]
从a的第三个元素开始和b的第一个元素开始匹配

多图之后就会发现,如果出现不匹配,那么那么它们的初始匹配位置就在 a[i-j] 而下一次匹配 就从 a[i-j+1] 开始匹配 b[0] 然后依次匹配下去。。。。。
直到 a全部匹配完:

或者是 b 全部匹配完:

代码如下:
#coding:utf-8
a = input("a >")
b = input("b >")
a_len = len(a)
b_len = len(b)
i = 0
j = 0
while(i < a_len and j < b_len): # i,j 为索引,所以不可能等于a,b的长度
if a[i] == b[j]:
i += 1 # 如果两个元素相等,那么就匹配下一个元素
j += 1
else:
i = i-j+1 # a 从 第 i-j+1 的位置开始重新匹配
j = 0 # b 依旧从 0 开始匹配
if i>=a_len: # 说明 a 已经全部匹配了。仍未找到b
print('a字符串中不含有b字符串')
else: # 说明退出while循环条件为 j>=b_len更具体来说是 j=b_len ,已经把b找完了。说明a中含有b,
site = i - j # 所以他们的最后一次匹配的开始位置就是 i - j
print('a中含有b.且初始匹配位置为 %d,匹配长度为 %d' % (site, j))
B-F 字符串匹配算法的更多相关文章
- Boyer-Moore 字符串匹配算法
字符串匹配问题的形式定义: 文本(Text)是一个长度为 n 的数组 T[1..n]: 模式(Pattern)是一个长度为 m 且 m≤n 的数组 P[1..m]: T 和 P 中的元素都属于有限的字 ...
- 【原创】通俗易懂的讲解KMP算法(字符串匹配算法)及代码实现
一.本文简介 本文的目的是简单明了的讲解KMP算法的思想及实现过程. 网上的文章的确有些杂乱,有的过浅,有的太深,希望本文对初学者是非常友好的. 其实KMP算法有一些改良版,这些是在理解KMP核心思想 ...
- KMP字符串匹配算法理解(转)
一.引言 主串(被扫描的串):S='s0s1...sn-1',i 为主串下标指针,指示每回合匹配过程中主串的当前被比较字符: 模式串(需要在主串中寻找的串):P='p0p1...pm-1',j 为模式 ...
- 字符串匹配算法KMP算法
数据结构中讲到关于字符串匹配算法时,提到朴素匹配算法,和KMP匹配算法. 朴素匹配算法就是简单的一个一个匹配字符,如果遇到不匹配字符那么就在源字符串中迭代下一个位置一个一个的匹配,这样计算起来会有很多 ...
- 【KMP】【字符串】KMP字符串匹配算法 学习笔记
一.简介 KMP是由Knuth.Morris和Prat发明的字符串匹配算法,它的时间复杂度是均摊\(O(n+m)\).其实用Hash也可以做到线性,只不过Hash存在极其微小的难以避免的冲突. ...
- 图解BM(Boyer-Moore)字符串匹配算法+代码实现
简介 本篇文章主要分为两个大的部分,第一部分通过图解的方式讲解BM算法,第二部分则代码实现一个简易的BM算法. 基本概念 bm是一个字符串匹配算法,有实验统计,该算法是著名kmp算法性能的3-4倍,其 ...
- 字符串KMP——用途广泛的字符串匹配算法 + 扩展KMP——特殊定义的字符串匹配
引 入 引入 引入 " SY 和 WYX 在看毛片.(几 毛 钱买到的动作 片,毛 片) WYX 突然想回味一个片段,但是只记得台词里面有一句挺长的 " ∗ ∗ ∗ ∗ **** ...
- 字符串匹配算法 - KMP
前几日在微博上看到一则微博是说面试的时候让面试者写一个很简单的字符串匹配都写不出来,于是我就自己去试了一把.结果写出来的是一个最简单粗暴的算法.这里重新学习了一下几个经典的字符串匹配算法,写篇文章以巩 ...
- KMP单模快速字符串匹配算法
KMP算法是由Knuth,Morris,Pratt共同提出的算法,专门用来解决模式串的匹配,无论目标序列和模式串是什么样子的,都可以在线性时间内完成,而且也不会发生退化,是一个非常优秀的算法,时间复杂 ...
- 字符串匹配算法之BF(Brute-Force)算法
BF(Brute-Force)算法 蛮力搜索,比较简单的一种字符串匹配算法,在处理简单的数据时候就可以用这种算法,完全匹配,就是速度慢啊. 基本思想 从目标串s 的第一个字符起和模式串t的第一个字符进 ...
随机推荐
- IOS网络开发(一)
1 简易的聊天工具 1.1 问题 Socket的英文原义是孔或者插座的意思,通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄,本案例使用第三方Socket编程框架AsyncSocket框架 ...
- [翻译]lpeg入门教程
原文地址:http://lua-users.org/wiki/LpegTutorial 简单匹配 LPeg是一个用于文本匹配的有力表达方式,比Lua原生的字符串匹配和标准正则表达式更优异.但是,就像其 ...
- 【转载】知乎答案----孙志岗----Google 发布了程序员养成指南,国内互联网巨头是否也有类似的指南和课程推荐
国内公司在复制国外商业模式的同时,也应复制人家的社会担当.所以,来答题了!就参考 Google 的框架,列一下中文的课程.大体上在线学完一个计算机专业,是基本不成问题的.但是,这不意味着你可以不上大学 ...
- 台球游戏的核心算法和AI(2)
前言: 最近研究了box2dweb, 觉得自己编写Html5版台球游戏的时机已然成熟. 这也算是圆自己的一个愿望, 一个梦想. 承接该序列的相关博文: • 台球游戏核心算法和AI(1) 同时结合htm ...
- C#中的GDI+图形绘制方法
GDI+图形绘制方法 1.首先对于绘制图形,必须的先将命名空间导入:using System.Drawing.Drawing2D; 2.然后在一个事件中写入程序 首先先将Graphics这个对象实例化 ...
- 关于char类型的连续输入
这个忘了好久了 先回想吧 一 单字符 ① char m; scanf("%d",&m); ② char m; m=getchar(); putchar(m); 二 字符数 ...
- Mvc4系列文章
http://www.cnblogs.com/duanshuiliu/tag/MVC/
- CSS 知识点
1:display:block:比较常用于<a><span>这两个标签——因为这两个标签非块元素,如果不用display:block定义一下,因为a标签没有结构,就是没有宽高, ...
- IIS7错误:不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的(overrideModeDefault="Deny")......
不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况.锁定是默认设置的(overrideModeDefault="Deny")...... 解决方案: 因为 II ...
- 关于jQuery中的submit()函数
关于jQuery中的submit()函数(绑定event handler or 触发event?) 今天在敲代码的时候无意间碰到了一个比较绕的问题(一个小师弟问的问题),思前想后都不明白,上午百度.谷 ...