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算法相关推荐

  1. 字符串匹配:BF算法

    (1)算法原理 BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符:若不相 ...

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

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

  3. 数组与串,串的实现,KMP,BF算法

    数组是一种常用的数据结构,高级语言头提供了支持数组的基本操作,而且数组也是构成其他数据结构的重要组成. 数组是N个相同元素的构成的占用一块地址连续的内存单元的有限序列. 数组的任一个元素都可以用在数组 ...

  4. BF算法与KMP算法详解

    目录 一.前言 二.BF算法 代码: 三.KMP算法 next数组: 关于为什么要找最长匹配前后缀: 代码: KMP: 代码: 三.代码汇总: 一.前言 说到字符串匹配,就不得不提BF算法和KMP算法 ...

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

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

  6. Javascript实现BF算法

    BF算法 BF算法,即暴风(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字 ...

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

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

  8. 【数据结构与算法】字符串匹配 BF算法 RK算法

    单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法 多模式串匹配算法 Trie 树和 AC 自动机 一.BF 算法 1,BF算法是Brute Force的缩写,中文译作暴力匹配算法,也 ...

  9. 模式串匹配的BF算法和KMP算法

    KMP是三位大牛:D.E.Knuth.J.H.Morris和V.R.Pratt同时发现的.为了解决模式匹配问题,也即寻找模式串(子串)在主串中第一次出现的位置,若模式串在主串中不存在则返回-1. 简单 ...

最新文章

  1. P1083 [NOIP 2012]借教室
  2. WINCE6.0+2443系统大概过10分钟进入sleep状态
  3. Spring MVC 4 - Hello World Tutorial
  4. alphazawgyiversion3 安装口令_车窗晴雨挡到底有着什么用?为什么那么多人安装?酷斯特玩车...
  5. QuantLib 101之Swap
  6. 为什么大部分人会碌碌无为?
  7. SpringSecurity框架【详解】
  8. SPSS24.0输了授权码还不能用怎么破?
  9. linux 开源网卡驱动,AMDGPU linux开源驱动
  10. 迷你屏+OLED好屏:个性专业两手抓 华硕灵耀X 14专业好屏体验
  11. T检验、F检验、Z检验、卡方检验
  12. 【毕业设计】基于 stm32 的病房呼叫系统 - 物联网 嵌入式 单片机
  13. 前端,值得收藏的那些网站
  14. 我的世界服务器php插件制作教程,我的世界服务器citizen公民插件使用教程
  15. cocos2d-x之怪物系统
  16. 我已经是糖尿病患者将近9年了。
  17. RW 搜索ACPI协议RSD PTR表
  18. 取色器(Snipaste) 截图 贴图 取色
  19. 深度学习中的归一化方法简介(BN、LN、IN、GN)
  20. 一周IT歪评丨清北BAT落户雄安新区/刘强东穿9块钱大裤衩/青少年沉迷王者日本称不惧怕中国

热门文章

  1. Asp组件中级入门与精通系列之三
  2. Swaks-smtp瑞士军刀(smtp邮件)
  3. [JSP暑假实训] 一.MyEclipse安装及JAVA基础知识
  4. 【数据结构与算法】之深入解析“石子游戏VIII”的求解思路与算法示例
  5. 【数据结构与算法】之电话号码键盘的字母组合算法
  6. 学计算机,怎么入门?
  7. SLAM 学习与开发经验分享
  8. 【Tools】VMware虚拟机三种网络模式详解和操作
  9. vs.net 打开.xaml文件编辑界面_怎么保护可移动磁盘中的文件防止被删除
  10. 友盟小米收不到推送消息_App消息推送的到达率多少才是正常的?