经典算法-BF算法(字符串匹配)
前言
字符串的匹配算法也是很经典的一个算法,在面试的时候常常会遇到,而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算法(字符串匹配)相关推荐
- 字符串匹配rk算法c语言,字符串匹配问题(BFRK算法)
1. 题目 有一个主串S={a,b,c,a,c,a,b,d,c},模式串T={a,b,d},请找出模式串在主串中第一次出现的位置 提示:不需要考虑字符串大小写问题,字符均为小写字母 2. BF算法 B ...
- 【数据结构与算法】【字符串匹配】Trie树
单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法 多模式串匹配算法 Trie 树和 AC 自动机 一. 什么是"Trie树"? 1. 他是一种树形结构,是一种专门 ...
- 算法之路,带你轻松学废算法系列之字符串匹配(中)
文章目录 字符串匹配中 前言 KMP算法 KMP算法的基本原理 失效函数计算方法 问题解答 KMP 算法复杂度分析 小结 Trie树 什么是Trie树 如何实现一棵 Trie 树? Trie树的构造 ...
- 算法之路,带你轻松学废算法系列之字符串匹配(下)
文章目录 字符串匹配下 前言 引入 多模式串匹配算法:AC 自动机 AC自动机过滤敏感词 时间复杂度分析 小结 结尾 字符串匹配下 前言 大家好,我是魏果果哦,算法呢,是我们程序员一生无法避免的垫脚石 ...
- KMP算法(求解字符串匹配)
提示:可搭配B站比特大博哥视频学习:传送门 (点击) 目录 前言 图解 代码 前言 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们 ...
- 【数据结构】字符串 模式匹配算法的理解与实现 Brute Force算法(BF算法)与KMP算法 (C与C++分别实现)
#笔记整理 若不了解串的定义,可至: 串(string)的定义与表示 查看 串的模式匹配算法 求子串位置的定位函数 Index(S, P, pos) 求子串的定位操作通常称作串的模式匹配(其中子串P称 ...
- 算法导论之字符串匹配
当然对于前缀函数π一定可以起到有效位移的判断,导论还是给了证明.这里就说明其证明依据和结论. 前缀函数迭代引理:设P是长度为m的模式,其前缀函数为π,对q=1,2-,m,有π*[q]= {k:k< ...
- 串匹配算法——BF算法
1.思路 相当于枚举,用主串S的每一个字符作为起始位置,和子串P进行比对.如果在S串中找到了和P串相等的,则返回本次查找的起始位置.当S[i] = P[j],i和j都向后走,即i++,j++,再判断你 ...
- 算法五——字符串匹配(上)
文章内容.图片均来自极客时间. 如何借助哈希算法实现高效字符串匹配 1 概念和用途 字符串匹配:查找一个字符串A在字符串B中是否出现,这个过程就是字符串匹配.A称为模式串,B称为主串.主串的长度记为n ...
- KMP(字符串匹配)算法 O(m+n)
在长度为m字符串中匹配长度为n的字符串 加快回溯:(1)建立回溯数组,O(n) ;(2)开始匹配,失败则回溯匹配串下标,O(m) Next [ ]数组 : Next [ k ]表示k及K之前最长的等长 ...
最新文章
- 【 58沈剑 架构师之路】各种SQL到底加了什么锁?
- •Grid报表和Free From报表产品之比较
- 树莓派 Ubuntu mate 18.04 下开启vncserver
- 7-25日牛客网刷题 未知点、错题 集合
- MyBatis配置:在控制台打印SQL语句
- 机器学习与分布式机器学习_我将如何再次开始学习机器学习(3年以上)
- java里的时间转换
- c++ 读取文件 最后一行读取了两次
- Android 简单几行代码实现摇一摇功能
- VS工作笔记-C++在release模式下可以进行调试
- 爱奇艺取消剧集超前点播
- python __call__
- springboot yml对于list列表配置方式
- java线程本地变量_Java并发编程示例(九):本地线程变量的使用
- Bailian4108 羚羊数量-Number Of Antelope【递推+打表】
- python是什么软件-零基础入门Python怎么学习?老男孩python用什么软件
- Windows核心编程_inlineHook
- java连接oracle jdbc连接
- usb3.0速度测试软件,主流B75原生SATA3.0和USB3.0速度测试
- Petalinux EMMC启动
热门文章
- python的 e是什么意思_python中的e是什么意思
- 编写一个fun函数,该函数地功能是:统计一行字符串中单词的个数,并作为函数值返回。字符串在主函数中输入,规定所有的单词由小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格!
- java有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
- AtCoder Beginner Contest 236 题解
- KIS专业版12.0迁移K3WISE14.3后自定义核算项目权限问题
- Android性能优化学习记录(二)稳定性与内存优化
- 深扒 | AI艺术品的另类产业链
- Java for循环的几种用法详解(转载)
- java开发用win7好还是win10_win10和win7哪个好用|两个系统的性能比较
- java 银联支付_Java 银联支付官网demo测试及项目整合代码