前言

字符串的匹配算法也是很经典的一个算法,在面试的时候常常会遇到,而BF算法是字符串模式匹配中的一个简单的算法

1,什么是BF算法

BF算法,即暴力(Brute Force)算法,是普通的模式匹配算法,思想简单,代码结构也简单

BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。

2,代码实现

分析:

要完成对于所有字符的匹配工作,可以遍历母串,并逐个与子串比较,若相同,则字串匹配位后移,若不成功,归零,当匹配成功长度等于字串长度,结束遍历,返回结果

代码:

void Get(string a,string b)
{int i,j=0;for(i=0;i<a.length();i++){if(a[i]==b[j])  //若匹配成功,则字串匹配字符后移一位j++;  else        //若不成功,字串重新从第一个开始,母串回溯{i=i-j+1;j=0;}           if(j==b.length())   {cout<<"Yes Ok";return;}}if(j!=b.length()) cout<<"Sorry"
}

3,算法的复杂度

若母串长度位m,字串长度位n,则:

最好情况平均时间复杂度位:O(m+n)
最坏情况平均时间复杂度位:O(m*n)

经典算法-BF算法(字符串匹配)相关推荐

  1. 字符串匹配rk算法c语言,字符串匹配问题(BFRK算法)

    1. 题目 有一个主串S={a,b,c,a,c,a,b,d,c},模式串T={a,b,d},请找出模式串在主串中第一次出现的位置 提示:不需要考虑字符串大小写问题,字符均为小写字母 2. BF算法 B ...

  2. 【数据结构与算法】【字符串匹配】Trie树

    单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法 多模式串匹配算法 Trie 树和 AC 自动机 一. 什么是"Trie树"? 1. 他是一种树形结构,是一种专门 ...

  3. 算法之路,带你轻松学废算法系列之字符串匹配(中)

    文章目录 字符串匹配中 前言 KMP算法 KMP算法的基本原理 失效函数计算方法 问题解答 KMP 算法复杂度分析 小结 Trie树 什么是Trie树 如何实现一棵 Trie 树? Trie树的构造 ...

  4. 算法之路,带你轻松学废算法系列之字符串匹配(下)

    文章目录 字符串匹配下 前言 引入 多模式串匹配算法:AC 自动机 AC自动机过滤敏感词 时间复杂度分析 小结 结尾 字符串匹配下 前言 大家好,我是魏果果哦,算法呢,是我们程序员一生无法避免的垫脚石 ...

  5. KMP算法(求解字符串匹配)

    提示:可搭配B站比特大博哥视频学习:传送门 (点击) 目录 前言 图解 代码 前言 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们 ...

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

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

  7. 算法导论之字符串匹配

    当然对于前缀函数π一定可以起到有效位移的判断,导论还是给了证明.这里就说明其证明依据和结论. 前缀函数迭代引理:设P是长度为m的模式,其前缀函数为π,对q=1,2-,m,有π*[q]= {k:k< ...

  8. 串匹配算法——BF算法

    1.思路 相当于枚举,用主串S的每一个字符作为起始位置,和子串P进行比对.如果在S串中找到了和P串相等的,则返回本次查找的起始位置.当S[i] = P[j],i和j都向后走,即i++,j++,再判断你 ...

  9. 算法五——字符串匹配(上)

    文章内容.图片均来自极客时间. 如何借助哈希算法实现高效字符串匹配 1 概念和用途 字符串匹配:查找一个字符串A在字符串B中是否出现,这个过程就是字符串匹配.A称为模式串,B称为主串.主串的长度记为n ...

  10. KMP(字符串匹配)算法 O(m+n)

    在长度为m字符串中匹配长度为n的字符串 加快回溯:(1)建立回溯数组,O(n) ;(2)开始匹配,失败则回溯匹配串下标,O(m) Next [ ]数组 : Next [ k ]表示k及K之前最长的等长 ...

最新文章

  1. 【 58沈剑 架构师之路】各种SQL到底加了什么锁?
  2. •Grid报表和Free From报表产品之比较
  3. 树莓派 Ubuntu mate 18.04 下开启vncserver
  4. 7-25日牛客网刷题 未知点、错题 集合
  5. MyBatis配置:在控制台打印SQL语句
  6. 机器学习与分布式机器学习_我将如何再次开始学习机器学习(3年以上)
  7. java里的时间转换
  8. c++ 读取文件 最后一行读取了两次
  9. Android 简单几行代码实现摇一摇功能
  10. VS工作笔记-C++在release模式下可以进行调试
  11. 爱奇艺取消剧集超前点播
  12. python __call__
  13. springboot yml对于list列表配置方式
  14. java线程本地变量_Java并发编程示例(九):本地线程变量的使用
  15. Bailian4108 羚羊数量-Number Of Antelope【递推+打表】
  16. python是什么软件-零基础入门Python怎么学习?老男孩python用什么软件
  17. Windows核心编程_inlineHook
  18. java连接oracle jdbc连接
  19. usb3.0速度测试软件,主流B75原生SATA3.0和USB3.0速度测试
  20. Petalinux EMMC启动

热门文章

  1. python的 e是什么意思_python中的e是什么意思
  2. 编写一个fun函数,该函数地功能是:统计一行字符串中单词的个数,并作为函数值返回。字符串在主函数中输入,规定所有的单词由小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格!
  3. java有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
  4. AtCoder Beginner Contest 236 题解
  5. KIS专业版12.0迁移K3WISE14.3后自定义核算项目权限问题
  6. Android性能优化学习记录(二)稳定性与内存优化
  7. 深扒 | AI艺术品的另类产业链
  8. Java for循环的几种用法详解(转载)
  9. java开发用win7好还是win10_win10和win7哪个好用|两个系统的性能比较
  10. java 银联支付_Java 银联支付官网demo测试及项目整合代码