算法系列27——KMP最长匹配字符串

kmp匹配算法的重点在于next数组

next数组存在的意义在于每次匹配失败后可以部分利用先前匹配的结果,不用全部从头匹配

next数组对子串进行计算,next数组的含义是该位置之前的字符串

的前缀后缀字符串最长匹配长度

则在当前位置匹配失败之后可以保留前缀后缀字符串最长匹配长度不用重做,则匹配指针跳跃到next所指示的位置,重新进行匹配,直到匹配指针指向0位置仍匹配不成功,则匹配指针在0,主串指针++

next数组计算的方法本身利用了next数组的性质,有递归的意味

next数组的0和1位置的值是固定的,0位置值为-1,1位置值为0

设置一个前后缀匹配指针在0

计算之后每一个位置的值:

  • 该位置前一个值与匹配指针指示的值相同
    • 则计算位置的值为匹配指针位置+1
    • 计算位置和匹配指针同时++
  • 不相同
    • 匹配指针跳到next所指示位置
      • next !=-1
        • 正常比较
      • next==-1
        • 计算值填为0之后++
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值