前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法字符串匹配(查找)-BF算法

算法字符串匹配(查找)-BF算法

作者头像
算法与编程之美
发布2019-07-17 17:37:36
1.7K0
发布2019-07-17 17:37:36
举报

欢迎点击「算法与编程之美」↑关注我们!

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

字符串是数据结构中比较简单的一种,但又是我们最常用的数据结构之一。对于字符串对象,最重要的操作之一便是字符串匹配(查找),本篇文章便向大家介绍一个典型的匹配算法—BF算法

为了方便理解,我们直接从问题入手,来理解这两种算法。

BF算法

目标串:BBC ABCDAB ABCD ABCDABDE

模式串:ABCDABD

提示:(空格也是一个字符串)

问题:查看模式串是否出现在目标串中,并找出其在目标串中的下标位置

分析:大家在碰到这个问题时,要如何解决呢?思考一下,下面讲解BF算法,其实也就是大多人都会想到的方法

思路概况:

将模式串的第一位字符与目标串的第一位字符比较,匹配成功,则将模式串第二位字符与目标串第二位字符比较……若不匹配,则将模式串向右移一位,与目标串继续比较。

例如此题,将模式串第一位字符A与目标串第一位字符B比较,匹配失败,将模式串第一位字符A与目标串第二位字符B比较,依此类推,得出结构。

详细算法思路:

  1. 用i和j分别表示目标串和模式串当前待比较字符的位置(下文的i和j均为此意),以此题为例,初始时,i为目标串的第一个字符B,j为模式串的第一个字符A。
  2. 若模式串中仍存在未比较的字符且目标串中剩余未比较字符的长度大于或等于模式串的长度,就执行下面的(3)~(7);否则执行(8)
  3. 记录当前目标串的下标i
  4. 判断模式串当前比较位置的字符是否相等
  5. 若(4)相等,就执行(6),否则执行(7)
  6. 将i和j分别执行加1操作,并执行(4)
  7. 将(3)中的值加1并赋值给i,再将j的值修改为0,执行(2),继续匹配。
  8. 输出字符串匹配失败

注意:

很多人在自己思考这个问题时,会犯一个错误。以此题为例:

蓝色表示匹配成功的字符,红色表示匹配失败的字符

目标串:BBC ABCDAB ABCDABCDABDE

模式串:ABCDABD

在模式串与目标串红色位置做比较时,因为模式串最后一位D会与目标串的空格作比较,匹配失败。很多人就会想,直接从匹配失败的这一位开始,继续下一次匹配,但这样可能会导致出错。

举个例子,当匹配到目标串中的蓝色部分时,由于最后一位不同,匹配失败。如果直接从匹配这一位或者下一位开始继续匹配,就会错过正确答案(目标串中下划线部分)

结束语:小伙伴若还有疑问,可在文章下方评论提出,小编会及时回复,感谢观看。

更多精彩文章:

算法|从阶乘计算看递归算法

算法|字符串匹配(查找)-KMP算法

JavaScript|脚本岂能随意放置

Web|设置隔行变色的单元格

开发|优秀的Java工程师的“对象”一定不错

谈一谈|2019蓝桥杯回顾与分享

where2go 团队


微信号:算法与编程之美

温馨提示:点击页面右下角“写留言”发表评论,期待您的参与!期待您的转发!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档