sunday算法简介

概述

一说到字符串匹配算法,脑海里的第一映像,大部分是KMP算法,因为一般教科书里面都有,但是kmp算法对于我这种脑袋不怎么好用的,看完过一段时间就忘了。sunday同样是作为字符串匹配算法,比kmp,bm算法快,关键的关键是原理简单。

问题描述

先说说sunday算法解决的问题吧:给两个字符串A,B,问字符串A的所有子串中有没有B
具体的例子来说,给你一篇文章,判断该文章里面有没有“我爱我的家”这句话。

原理

最简单的办法肯定是蛮力匹配,从文章的开始位置,先看前5个字是不是“我爱我的家”,如果不是,向后移动一位,看第2到第6个字是不是“我爱我的家“,然后如此的进行下去。这样的方法肯定是能找出来的,但是效率就太低了。sunday算法的思想就是,当匹配不成功的时候,尽可能的跳过多的字符。
当匹配不成功的时候,我们就看子串结束位置的下一个字符,用C来表示,
情况一:如果C没有出现在B中,那我们下次比较的时候,就可以直接跳到C的下一个字符开始
情况二:如果C出现在B中,我们就用B的中最靠后C与之对其,所以在匹配之前,我们要对B先进行预处理,用来确定,当C为B中的某个字符的时候,所需要移动的步数

比如”我爱我的家”,我们预处理的结果为 (字符:步数){“我”:3,“爱”:4 ,“的”:2,”家”:1}
下面举一个具体的例子
A: 我 的 家 在 太 阳 , 太 阳 给 了 我 力 量,所 以 我 爱 我 的 家,我 爱 太 阳
B : - 我 爱 我 的 家
首先比较,是不成功,我们在看下一个字符C为 “阳”, 明显 “阳” 字不在B中,所以就是上面的情况一,然后我们再移动B字符,对其阳的下一个字符,“,”
A: 我 的 家 在 太 阳 , 太 阳 给 了 我 力 量,所 以 我 爱 我 的 家,我 爱 太 阳
B : ———————– 我 爱 我 的 家
也没有匹配成功,看下一个字符C为“我”,出现在B中,通过我们预处理的结果,出现“我”字移动3个位置,ok我们移动三个位置
A: 我 的 家 在 太 阳 , 太 阳 给 了 我 力 量 , 我 爱 我 的 家,我 爱 太 阳
B : —————————————- 我 爱 我 的 家
依然没有匹配成功,下一个字是“爱”, 出现在B中,预处理的结果告诉我们,移动4个位置
A: 我 的 家 在 太 阳 , 太 阳 给 了 我 力 量 ,我 爱 我 的 家,我 爱 太 阳
B : —————————————————— 我 爱 我 的 家
匹配成功

通过4次比较就找出来了,简单暴力吧

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值