"pattern" 字符串的结果 "count" 没有得到打印。这是代码
the resulting "count" of "pattern" string in not getting print. here is the code
我尝试实现了 knuth morris pratt 算法。文本中出现的图案不会被打印出来。 count 变量保存一个模式在字符串中出现了多少次的值。请帮助解决问题
package main
import "fmt"
func kmppre(pattern string, shiftarr []int) {
m := len(pattern)
i := 0
j := -1
for i < m {
for j >= 0 && pattern[i] != pattern[j] {
j = shiftarr[j]
}
i++
j++
shiftarr[i] = j
}
}
func kmp(text string, pattern string) int {
n := len(text)
m := len(pattern)
count := 0
i, j := 0, 0
shiftarr := make([]int, m+1)
kmppre(pattern, shiftarr)
for i < n {
for j >= 0 && text[i] != pattern[j] {
j = shiftarr[j]
}
i++
j++
if j == m {
count++
j = shiftarr[j]
}
}
return count
}
func main() {
fmt.Print("enter the text \n")
var text string
fmt.Scan(&text)
fmt.Print("enter the pattern string\n")
var pattern string
fmt.Scan(&pattern)
a := kmp(text, pattern)
fmt.Println(a)
}
for j >= 0 && pattern[i] != pattern[j] {
应该是
for j > 0 && pattern[i] != pattern[j] {
我尝试实现了 knuth morris pratt 算法。文本中出现的图案不会被打印出来。 count 变量保存一个模式在字符串中出现了多少次的值。请帮助解决问题
package main
import "fmt"
func kmppre(pattern string, shiftarr []int) {
m := len(pattern)
i := 0
j := -1
for i < m {
for j >= 0 && pattern[i] != pattern[j] {
j = shiftarr[j]
}
i++
j++
shiftarr[i] = j
}
}
func kmp(text string, pattern string) int {
n := len(text)
m := len(pattern)
count := 0
i, j := 0, 0
shiftarr := make([]int, m+1)
kmppre(pattern, shiftarr)
for i < n {
for j >= 0 && text[i] != pattern[j] {
j = shiftarr[j]
}
i++
j++
if j == m {
count++
j = shiftarr[j]
}
}
return count
}
func main() {
fmt.Print("enter the text \n")
var text string
fmt.Scan(&text)
fmt.Print("enter the pattern string\n")
var pattern string
fmt.Scan(&pattern)
a := kmp(text, pattern)
fmt.Println(a)
}
for j >= 0 && pattern[i] != pattern[j] {
应该是
for j > 0 && pattern[i] != pattern[j] {