Результирующий "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] {

Другие вопросы по тегам