判断两个串之间是否存在主串与子串的关系,这个过程称为串的模式匹配。

在串的模式匹配过程,子串 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算法(普通模式匹配算法)相关推荐

  1. 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)

    目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...

  2. 算法篇 --- BF算法(暴力匹配算法)

    找字符串 abcac,在一个串中找另一个串 上下两个字符串的第一个字符比较,如果上下两个字符串的字符不同,上面的字符串(原字符串)就移动一个位置,下面的字符串(给定字符串)不移动 如果第1个字符相同, ...

  3. 算法笔记:简单的字符串模式匹配-BF算法

    字符串模式匹配是匹配字符串A中是否存在子串a,一般字符串的结尾为'\0',可以以此作为字符串结束的判定标准. 其过程原理图如下所示: 给出源代码: #include<stdio.h> #i ...

  4. 字符串匹配算法(BF算法KMP算法)

    字符串匹配算法 暴力匹配(BF)算法 KMP算法 next数组 求next数组的练习 next数组的优化(nextval数组) 练习 暴力匹配(BF)算法 BF算法,即暴力(Brute Force)算 ...

  5. 【数据结构】字符串 模式匹配算法的理解与实现 Brute Force算法(BF算法)与KMP算法 (C与C++分别实现)

    #笔记整理 若不了解串的定义,可至: 串(string)的定义与表示 查看 串的模式匹配算法 求子串位置的定位函数 Index(S, P, pos) 求子串的定位操作通常称作串的模式匹配(其中子串P称 ...

  6. 字符串:3.KMP算法(快速模式匹配算法)详解

    BF算法的改进--KMP算法(快速模式匹配算法). 串的普通模式匹配算法,大体思路是:模式串从主串的第一个字符开始匹配,每匹配失败,主串中记录匹配进度的指针 i 都要进行 i-j+1 的回退操作(这个 ...

  7. BF算法(暴力算法)--模式匹配算法

    模式匹配算法:是数据结构中字符串的一种基本运算,给定一个子串,要求在某个字符串中找出与该子串相同的所有子串,这就是模式匹配.用途:搜索引擎.拼写检查.语言翻译.数据压缩等. BF算法:         ...

  8. 【CodeForces - 260B 】Ancient Prophesy (暴力匹配,BF算法,日期字符串)

    题干: A recently found Ancient Prophesy is believed to contain the exact Apocalypse date. The prophesy ...

  9. 字符串的模式匹配--BF算法KMP算法

    BF算法是基于主串指针回溯,重新与子串进行逐字符进行比较,主串为S什么要进行回溯呢,原因在于模式P中存在相同的字符或者说由字符(串)存在重复(模式的部分匹配性质),设想如果模式P中字符各不相同,主串就 ...

最新文章

  1. 搭建EJB3开发环境
  2. lisp修改界址线属性_如何获取界址线的界址线位置等扩展属性
  3. C++一维数组和指针的关系总结
  4. 这个我过滤概述UIPickerView键盘处理
  5. WPF后台自定义文字带背景的选择状态按钮
  6. Android10以上之APEX格式介绍
  7. Android怎样实现毛玻璃效果之Android高级模糊技术
  8. darknet53 作用_darknet53 yolo 下的识别训练
  9. ppt图片文字嵌入_形状,文字填充图片教你做出好看的PPT
  10. 【Eye-Tracking】一、眼动追踪概述
  11. 计算机 access数据库,计算机等级考试二级ACCESS数据库基本使用方法
  12. 《赋得古原草送别》诗改文
  13. 食品加工设备远程管理维护解决方案
  14. python保存图片的常用方法
  15. 基于java web和echarts的数据可视化项目
  16. Oracle中select SEQ_YX.nextval from dual是什么意思?
  17. [剑指 offer]--大顶堆 ➕ 快速选择 --面试题40. 最小的k个数
  18. d3dcompiler_47.dll: Access is denied
  19. java 的访问修饰符
  20. thinkcmf5 数据备份、恢复

热门文章

  1. 南水北调真相 林凌刘世庆范晓做客四川新闻网
  2. 计算机组成原理 mov(r0),-(sp),第三章作业
  3. java运行异常日志_使用log4j记录Java中的运行时异常
  4. SQL Server安装问题程序被挂起的错误解决办法
  5. 华为MatePad 11开启预售:鸿蒙OS加持 2499元起!
  6. 研究机构:特斯拉Model 3是2月份最畅销电动汽车
  7. 拼多多加大百亿补贴力度,iPhone 12中配版券后价5899元
  8. 苹果新品又要来了 下周可能推出AirPods Studio
  9. 《俄罗斯方块》正版授权手游开启预约:支持QQ、微信双平台
  10. 太难了!经营12年的明星机构都关停了,却还是有玩家疯狂入局