[Golang] KMP 模板
837
2021.12.23
发布于 未知归属地

代码

func KMP(src, pat string) int {
	if pat == "" {
		return 0
	}
	ls := len(src)
	lp := len(pat)
	next := make([]int, lp)
	for i, j := 1, 0; i < lp; i++ {
		for j > 0 && pat[i] != pat[j] {
			j = next[j-1]
		}
		if pat[i] == pat[j] {
			j++
		}
		next[i] = j
	}
	for i, j := 0, 0; i < ls; i++ {
		for j > 0 && src[i] != pat[j] {
			j = next[j-1]
		}
		if src[i] == pat[j] {
			j++
		}
		if j == lp {
			return i - lp + 1
		}
	}
	return -1
}

相关题目

评论 (0)