算法的细节可以参考网上的资料或数据结构的相关教材,这里直接上代码了~
鉴于本人技艺浅陋,有的地方写的可能不合理,代码略长,如果有改进之处,请留言指点,算法本身测试过了:
package main
import (
"fmt"
)
func GetNextValueArray(sub []byte) (next []int) {
var (
length int = len(sub)
middle int
compare_left int
compare_right int
match_count int
)
next = make([]int, length)
next[0] = 0
next[1] = 0
for i := 2; i < length; i++ {
middle = i / 2
match_count = 0
if i%2 == 0 {
for j := 0; j < middle; j++ {
compare_left = 0
compare_right = i - 1 - j
for compare_left <= j {
if sub[compare_left] != sub[compare_right] {
break
}
compare_left++
compare_right++
}
if compare_left == j+1 {
match_count++
}
}
next[i] = match_count
} else {
for j :&#