KMP匹配算法

          以前那个时候大二,想了几天都没有想明白,现在看看这个算法其实很简单。

          首先如果我们用最简单的方式去匹配字符串,用模式串与主串一个一个比较,如果匹配不上,那么我们要移动一个单位从头开始一个一个比较,直到匹配成功或者匹配玩所有的目的字符串。

         仔细观察会发现一个问题,其实有很多时候我们不一定每次只移动一个位置。但是我们怎么判断需要移动多少个单位呢?结果观察我们会发现,移动多少个单位其实是由模式串在第几个字符匹配失败所决定

 

现在我就先讲解怎么样实现KMP匹配算法:

(1)我们根据模式串算出所有的字符匹配失败所移动的位置数放入容器里,

(2)按照正常匹配方式匹配

(3)如果匹配成功就直接返回;如果匹配到主串结尾还没有匹配成功,直接结束;如果匹配失败,我们根据匹配失败的字符的位置去容器中的取值,根据取出来的值决定去滑动多少个单位。

(4)重复(2)(3)

 

上面的算法步骤其实都很简单,难点就是我们怎么根据模式串算出字符匹配失败移动的位置?(希望你仔细观察发现规律)

 

文字不好描述,有时间画图表示。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值