不要问为什么,问就是知道了
package main
import "fmt"
func main () {
res := kmp([]rune("我爱"), []rune("我我爱中国"))
fmt.Println(res)
}
func kmp(keys []rune, content []rune) (int) {
next_array := next(keys)
i, j := 0, 0
for i < len(content){
if j == -1 || keys[j] == content[i] {
i++
j++
} else {
j = next_array[j]
}
if j == len(next_array) {
return i - len(next_array)
}
}
return -1
}
func next(keys []rune) ([]int) {
var len = len(keys)
next := make([]int, len)
next[0] = -1
k := -1
i := 0
for i < len -1 {
if k == -1 || keys[i] == keys[k] {
k++
i++
next[i] = k
} else {
k = next[k]
}
}
return next
}