Результирующий "count" строки "pattern" в не полученной печати. вот код
Я попытался реализовать алгоритм Кнута Морриса Пратта. результирующий вид рисунка в тексте не печатается. Переменная 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)
}
1 ответ
Решение
для j >= 0 && pattern[i]!= pattern[j] {
должно быть
для j > 0 && pattern[i]!= pattern[j] {