串的模式匹配

串的模式匹配一般有两种算法:分别为BF算法和KMP算法。

其中BF算法也叫暴力算法:

需要注意的是BF算法在失配之后主串回溯到i=i-j+2;模式串回溯到j=1

用 BF 算法定位模式串在主串中的位置,就是简单粗暴的从主串的起始位置开始,不断地将模式串中的字符和主串中的字符进行对比。

具体来讲,假设对模式串 A("abcac")和主串 B("ababcabacabab")进行模式匹配,BF 算法的执行过程如下:

1) 将模式串 A 与主串 B 的首字符对齐,逐个判断相对的字符是否相等,如 1 所示:


图 1 串的第一次模式匹配示意图


2) 图 1 中,由于模式串 A 与主串 B 的第 3 个字符匹配失败,此时将模式串 A 后移一个字符的位置,采用同样的方法重新匹配,如图 2 所示:


图 2 串的第二次模式匹配示意图


3) 图 2 中可以看到,两个串依旧匹配失败,模式串 A 继续后移一个字符的位置,如图 3 所示:


图 3 串的第三次模式匹配示意图


4) 图 3 仍然匹配失败,模式串 A 继续向后移动,一直移动至图 4 的位置才匹配成功:


图 4 串模式匹配成功示意图


从图 1 到图 4,模式串 A 与主串 B 共匹配了 6 次才成功,最终定位到模式串 A 位于主串 B 第 6 的位置处,整个模式匹配的过程就称为 BF 算法。

至于kmp算法则较为复杂些:

鉴于次,本文不再对此进行细致的讲解,只分享一下next【j】和nextval数组的求解方法,需要详细学习的请前往以下链接:

(48条消息) 数据结构KMP算法配图详解(超详细)_哈顿之光的博客-CSDN博客

下面则是nextval数组的求解:

其中,这之间的是字符和字符之间的比较

 至此,串的模式匹配已经告一段落,希望自己在忘记的时候及时回来复习。

2023/5/22距离考试仅剩两周不到的时间,希望考试顺利

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值