Sunday算法:查找字符串

Sunday算法是用于查找子串的一种算法,具体的应用场景看这里
相比于KMP,BM算法,Sunday算法更快,并且更好理解(自认为哈

下面用比较正式的语言介绍一下该算法:

原字符串为文本串,匹配的子串为模式串
从前往后匹配,在匹配失败时,关注的是文本串中参加匹配的最末位字符的下一位字符
—如果该字符没有在模式串中出现则直接跳过,即移动位数 = 匹配串长度 + 1;
—否则,其移动位数 = 模式串中最右端的该字符到末尾的距离+1。

是不是看的一脑袋问号?事实上在学习一个算法时,我认为不应该一开始就看概念,而是从例子入手。读懂了例子,就有事半功倍的效果。

话不多说,举一个栗子:
令文本串为:"substring searching algorithm
令模式串为:search

.

1.初始状态:

在这里插入图片描述
现在匹配失败了,那么我们要试图移动模式串,再进行下一次匹配
(事实上我觉得各个算法不同的地方就在于怎么移动模式串)

Sunday算法选择关注文本串中参加匹配的最末位字符的下一位字符

在这里插入图片描述
在这里,就是箭头指向的 i 。可以看到,i 没有出现在模式串search中。
所以,我们可以说,文本串中所有包括i的部分,都不会与search匹配。

2.移动模式串

这样我们可以直接将search直接移动到 i 的后面。从i后面的元素n开始匹配。
在这里插入图片描述
ok,现在模式串search还是没有与文本串匹配。我们继续关注上文所说的“下一位字符”,也就是箭头所指的 r。
r出现在了模式串中,出现在模式串的倒数第3位。
那么我们将模式串向右移动3位。也就是将两个r先匹配起来.

3.移动模式串

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值