KMP算法理解模式字符串的预处理

算法有一个对模式字符串预处理的过程,计算出模式字符串每个字符对应位置的偏移值。这个偏移值被定义为可以作为后缀的最长前缀长度。

可以用一堆叠在一起的尖尖帽子来比喻:帽子每一层代表一个字符,不同的帽子,代表不同的前缀,如果可以摞在一起,就表示正好有相同的后缀。

前提是帽子顶部不能变,只是在底部截断。

这样求每个字符的偏移值,就是求每一层的可以摞起来最长子帽子(定义为向上截取)。

用递推法,若第q层已经计算好子帽子k(或者没有),那么第q+1层如果和k+1 相同,

那么其子帽子就是k+1.如果不等呢,只需要找子帽子k的子帽子再按上述规则即可。因为子帽子都是可以摞在一起的。中间找到一个没有子帽子的即可结束(为什么?) 直到帽子顶,也保证找到的第一个子帽子是最长的子帽子。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值