字符串:2.BF算法(普通模式匹配算法)
判断两个串之间是否存在主串与子串的关系,这个过程称为串的模式匹配。
在串的模式匹配过程,子串 T 通常被叫做“模式串”。
普通的模式匹配(“BF”算法)
判断两个串是否存在子串与主串的关系,最直接的算法就是拿着模式串,去和主串从头到尾一一比对,这就是“BF”算法的实现思想。
将提供的模式串(例如 “abcac” )从主串的第一个字符开始,依次判断相同位置的字符是否相等,如果全部相等,则匹配成功;反之,将子串向后移动一个字符的位置,继续与主串中对应的字符匹配。
算法运行过程:(图中,i 和 j 表示匹配字符在数组中的位置下标)
如图所示,第一次匹配,模式串和主串匹配到第三个字符时,匹配失败;模式串向右移动一个字符的位置,还是从第一个字符 ‘a’ 和主串的第二个字符 ‘b’ 相匹配,匹配失败;模式串继续后移一个字符的位置,继续匹配。
实现代码:
#include <stdio.h>
#include <string.h>
int sel(char * S,char *T){int i=0,j=0;while (i<strlen(S) && j<strlen(T)) {if (S[i]==T[j]) {i++;j++;}else{i=i-j+1;j=0;}}//跳出循环有两种可能,i=strlen(S)说明已经遍历完主串;j=strlen(T),说明模式串遍历完成,在主串中成功匹配if (j==strlen(T)) {return i-strlen(T)+1;}//运行到此,为i==strlen(S)的情况return 0;
}
int main() {int add=sel("ababcabcacbab", "abcac");printf("%d",add);return 0;
}
运行结果:
6
“BF”算法的时间复杂度
“BF” 算法在最理想的情况下的时间复杂度为O(m)
( m 是模式串的长度,也就是第一次匹配就成功的情况)。
一般情况下,"BF"算法的时间复杂度为O(n+m)
(n是主串的长度,m是模式串的长度)。
最坏的情况下的时间复杂度为O(n*m)
(例如主串 S 为“000000000001”,模式串 T ”001”,每次匹配时,直到匹配最后一个元素,才得知匹配失败,运行了 n*m 次)。
总结
“BF”算法在进行模式匹配时,从主串的第一个字符开始,每次失败,模式串向后移动一个字符的位置,继续匹配,无脑式操作。但是整个算法受测试数据的影响非常大,在解决实际问题时,由于数据量庞大,时间复杂度往往会很高。
字符串:2.BF算法(普通模式匹配算法)相关推荐
- 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)
目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...
- 算法篇 --- BF算法(暴力匹配算法)
找字符串 abcac,在一个串中找另一个串 上下两个字符串的第一个字符比较,如果上下两个字符串的字符不同,上面的字符串(原字符串)就移动一个位置,下面的字符串(给定字符串)不移动 如果第1个字符相同, ...
- 算法笔记:简单的字符串模式匹配-BF算法
字符串模式匹配是匹配字符串A中是否存在子串a,一般字符串的结尾为'\0',可以以此作为字符串结束的判定标准. 其过程原理图如下所示: 给出源代码: #include<stdio.h> #i ...
- 字符串匹配算法(BF算法KMP算法)
字符串匹配算法 暴力匹配(BF)算法 KMP算法 next数组 求next数组的练习 next数组的优化(nextval数组) 练习 暴力匹配(BF)算法 BF算法,即暴力(Brute Force)算 ...
- 【数据结构】字符串 模式匹配算法的理解与实现 Brute Force算法(BF算法)与KMP算法 (C与C++分别实现)
#笔记整理 若不了解串的定义,可至: 串(string)的定义与表示 查看 串的模式匹配算法 求子串位置的定位函数 Index(S, P, pos) 求子串的定位操作通常称作串的模式匹配(其中子串P称 ...
- 字符串:3.KMP算法(快速模式匹配算法)详解
BF算法的改进--KMP算法(快速模式匹配算法). 串的普通模式匹配算法,大体思路是:模式串从主串的第一个字符开始匹配,每匹配失败,主串中记录匹配进度的指针 i 都要进行 i-j+1 的回退操作(这个 ...
- BF算法(暴力算法)--模式匹配算法
模式匹配算法:是数据结构中字符串的一种基本运算,给定一个子串,要求在某个字符串中找出与该子串相同的所有子串,这就是模式匹配.用途:搜索引擎.拼写检查.语言翻译.数据压缩等. BF算法: ...
- 【CodeForces - 260B 】Ancient Prophesy (暴力匹配,BF算法,日期字符串)
题干: A recently found Ancient Prophesy is believed to contain the exact Apocalypse date. The prophesy ...
- 字符串的模式匹配--BF算法KMP算法
BF算法是基于主串指针回溯,重新与子串进行逐字符进行比较,主串为S什么要进行回溯呢,原因在于模式P中存在相同的字符或者说由字符(串)存在重复(模式的部分匹配性质),设想如果模式P中字符各不相同,主串就 ...
最新文章
- 搭建EJB3开发环境
- lisp修改界址线属性_如何获取界址线的界址线位置等扩展属性
- C++一维数组和指针的关系总结
- 这个我过滤概述UIPickerView键盘处理
- WPF后台自定义文字带背景的选择状态按钮
- Android10以上之APEX格式介绍
- Android怎样实现毛玻璃效果之Android高级模糊技术
- darknet53 作用_darknet53 yolo 下的识别训练
- ppt图片文字嵌入_形状,文字填充图片教你做出好看的PPT
- 【Eye-Tracking】一、眼动追踪概述
- 计算机 access数据库,计算机等级考试二级ACCESS数据库基本使用方法
- 《赋得古原草送别》诗改文
- 食品加工设备远程管理维护解决方案
- python保存图片的常用方法
- 基于java web和echarts的数据可视化项目
- Oracle中select SEQ_YX.nextval from dual是什么意思?
- [剑指 offer]--大顶堆 ➕ 快速选择 --面试题40. 最小的k个数
- d3dcompiler_47.dll: Access is denied
- java 的访问修饰符
- thinkcmf5 数据备份、恢复
热门文章
- 南水北调真相 林凌刘世庆范晓做客四川新闻网
- 计算机组成原理 mov(r0),-(sp),第三章作业
- java运行异常日志_使用log4j记录Java中的运行时异常
- SQL Server安装问题程序被挂起的错误解决办法
- 华为MatePad 11开启预售:鸿蒙OS加持 2499元起!
- 研究机构:特斯拉Model 3是2月份最畅销电动汽车
- 拼多多加大百亿补贴力度,iPhone 12中配版券后价5899元
- 苹果新品又要来了 下周可能推出AirPods Studio
- 《俄罗斯方块》正版授权手游开启预约:支持QQ、微信双平台
- 太难了!经营12年的明星机构都关停了,却还是有玩家疯狂入局