编辑代码

package main
import "fmt"
func main () {
    //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。
    fmt.Println("Hello JSRUN!   \n\n         - from Golang .")

    p := "abcabe"
    s := "abcabfabcabef"

    next := make([]int, len(p))
    next[0] = -1
    
    fmt.Println(next)
    
    j := -1
    for i := 1; i < len(p); i++ {
        for j != -1 && p[i] != p[j+1] {
            j = next[j]
        }
        
        if p[i] == p[j+1] {
            j ++
        }
        
        next[i] = j
    }
    
    fmt.Println(next)
    
    j = -1
    for i := 0; i < len(s); i++ {
        for j != -1 && s[i] != p[j+1] {
            j = next[j]
        }
        
        if s[i] == p[j+1] {
            j ++
        }
        
        if j == len(p)-1 {
            fmt.Printf("find %s in %s, index is %d", p, s, i-j)
            j = next[j]
        }
    }
}