串匹配算法——BF算法
1.思路
相当于枚举,用主串S的每一个字符作为起始位置,和子串P进行比对。如果在S串中找到了和P串相等的,则返回本次查找的起始位置。当S[i] = P[j],i和j都向后走,即i++,j++,再判断你S[i] 和P[j]是否匹配,如果匹配继续i++,j++,如果不匹配,i回到第一个和j匹配的字符的后一个字符的位置 。即如下图,此时S[i] == P[j],i和j都向后走,i一直走到下一个a,j走到d,发现S[i] != P[j],所以i回到a的字符后面,即b位置(i-j+1),j回到下标0位置。
2.代码
// s是主串 p是子串 pos是从s的pos位置开始查找
// 时间复杂度: O(n*m)
int BF(char* s, char* p, int pos)
{if (s == NULL || p == NULL || pos < 0) return -1;int lens = strlen(s);int lenp = strlen(p);if (lens - pos < lenp) return -1;// s串从pos到结尾的长度如果小于p串的长度,则s串中不可能有p串int i = pos;//s串下标 int j = 0;//p串下标while (i < lens && j < lenp){if (s[i] == p[j]){i++;j++;}else{i = i - j + 1;j = 0;}}// 上面的循环已经将p串遍历了一遍,在s串中找到了p串if (j == lenp)//说明在s串中找到了p串{return i - j;//匹配串的第一个字符的下标}return -1;
}
串匹配算法——BF算法相关推荐
- 字符串匹配:BF算法
(1)算法原理 BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符:若不相 ...
- 【数据结构】字符串 模式匹配算法的理解与实现 Brute Force算法(BF算法)与KMP算法 (C与C++分别实现)
#笔记整理 若不了解串的定义,可至: 串(string)的定义与表示 查看 串的模式匹配算法 求子串位置的定位函数 Index(S, P, pos) 求子串的定位操作通常称作串的模式匹配(其中子串P称 ...
- 数组与串,串的实现,KMP,BF算法
数组是一种常用的数据结构,高级语言头提供了支持数组的基本操作,而且数组也是构成其他数据结构的重要组成. 数组是N个相同元素的构成的占用一块地址连续的内存单元的有限序列. 数组的任一个元素都可以用在数组 ...
- BF算法与KMP算法详解
目录 一.前言 二.BF算法 代码: 三.KMP算法 next数组: 关于为什么要找最长匹配前后缀: 代码: KMP: 代码: 三.代码汇总: 一.前言 说到字符串匹配,就不得不提BF算法和KMP算法 ...
- 字符串的模式匹配--BF算法KMP算法
BF算法是基于主串指针回溯,重新与子串进行逐字符进行比较,主串为S什么要进行回溯呢,原因在于模式P中存在相同的字符或者说由字符(串)存在重复(模式的部分匹配性质),设想如果模式P中字符各不相同,主串就 ...
- Javascript实现BF算法
BF算法 BF算法,即暴风(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字 ...
- 字符串匹配算法(BF算法KMP算法)
字符串匹配算法 暴力匹配(BF)算法 KMP算法 next数组 求next数组的练习 next数组的优化(nextval数组) 练习 暴力匹配(BF)算法 BF算法,即暴力(Brute Force)算 ...
- 【数据结构与算法】字符串匹配 BF算法 RK算法
单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法 多模式串匹配算法 Trie 树和 AC 自动机 一.BF 算法 1,BF算法是Brute Force的缩写,中文译作暴力匹配算法,也 ...
- 模式串匹配的BF算法和KMP算法
KMP是三位大牛:D.E.Knuth.J.H.Morris和V.R.Pratt同时发现的.为了解决模式匹配问题,也即寻找模式串(子串)在主串中第一次出现的位置,若模式串在主串中不存在则返回-1. 简单 ...
最新文章
- P1083 [NOIP 2012]借教室
- WINCE6.0+2443系统大概过10分钟进入sleep状态
- Spring MVC 4 - Hello World Tutorial
- alphazawgyiversion3 安装口令_车窗晴雨挡到底有着什么用?为什么那么多人安装?酷斯特玩车...
- QuantLib 101之Swap
- 为什么大部分人会碌碌无为?
- SpringSecurity框架【详解】
- SPSS24.0输了授权码还不能用怎么破?
- linux 开源网卡驱动,AMDGPU linux开源驱动
- 迷你屏+OLED好屏:个性专业两手抓 华硕灵耀X 14专业好屏体验
- T检验、F检验、Z检验、卡方检验
- 【毕业设计】基于 stm32 的病房呼叫系统 - 物联网 嵌入式 单片机
- 前端,值得收藏的那些网站
- 我的世界服务器php插件制作教程,我的世界服务器citizen公民插件使用教程
- cocos2d-x之怪物系统
- 我已经是糖尿病患者将近9年了。
- RW 搜索ACPI协议RSD PTR表
- 取色器(Snipaste) 截图 贴图 取色
- 深度学习中的归一化方法简介(BN、LN、IN、GN)
- 一周IT歪评丨清北BAT落户雄安新区/刘强东穿9块钱大裤衩/青少年沉迷王者日本称不惧怕中国
热门文章
- Asp组件中级入门与精通系列之三
- Swaks-smtp瑞士军刀(smtp邮件)
- [JSP暑假实训] 一.MyEclipse安装及JAVA基础知识
- 【数据结构与算法】之深入解析“石子游戏VIII”的求解思路与算法示例
- 【数据结构与算法】之电话号码键盘的字母组合算法
- 学计算机,怎么入门?
- SLAM 学习与开发经验分享
- 【Tools】VMware虚拟机三种网络模式详解和操作
- vs.net 打开.xaml文件编辑界面_怎么保护可移动磁盘中的文件防止被删除
- 友盟小米收不到推送消息_App消息推送的到达率多少才是正常的?