golang kmp算法实现

// 不多逼逼直接上代码。原理的话可以参考下面的链接。讲的非常清晰
package main import "fmt" func genNext(s string) []int { sLen := len(s) next := make([]int, sLen) c := 0 d := -1 next[0] = -1 for c < sLen - 1 { if d == -1 || s[c] == s[d] { c++ d++ if s[c] == s[d] { next[c] = next[d] }else { next[c] = d } }else { d = next[d] } } return next } func Kmp(chang string, duan string) int { cLen := len(chang) dLen := len(duan) if dLen == 0 || cLen == 0 { return 0 } next := genNext(duan) c := -1 d := -1 for c < cLen && d < dLen { if d == -1 || (chang[c] == duan[d]) { c++ d++ }else { d = next[d] } } if d == dLen { return c - dLen } return 0 }   

  

参考:https://www.bilibili.com/video/BV1S64y1u74P?t=4087

posted on 2021-04-12 01:58  biwentao  阅读(267)  评论(0)    收藏  举报

导航