Ошибка с самой длинной распространенной подстрокой

StackOverflow https://stackoverflow.com//questions/22072939

Вопрос

Я сделал это до сих пор

function lcs(xstr, ystr)
        if xstr:len() == 0 or ystr:len() == 0 then
                return ""
        end
        x = xstr:sub(1,1)
        y = ystr:sub(1,1)
        xs = xstr:sub(2)
        ys = ystr:sub(2)
        if x == y then
                return x .. lcs(xs, ys)
        else
                l1 = lcs(xstr, ys)
                l2 = lcs(xs, ystr)
                if l1:len() > l2:len() then
                        return l1
                else
                        return l2
                end
        end
end

print(lcs("abcd", "bcd"))

к сожалению, он печатает только "d", а не "bcd", как ожидалось.Для меня это выглядит так, как будто строка "l2 = lcs(xs, ystr)" не была выполнена, потому что, если я добавлю debug print в начале, она напечатает, что функция не была вызвана с аргументами "bcd" и "bcd", но я уверен, что значения в порядке после начала else заявление.Я был бы признателен за любую помощь.

Это было полезно?

Решение

Ваш xs переменная является глобальной

l1 = lcs(xstr, ys)
l2 = lcs(xs, ystr)

Первая строка портит xs значение, используемое второй строкой.
Сделайте все ваши временные переменные (x, y, xs, ys, l1, l2) локальными.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top