Ошибка с самой длинной распространенной подстрокой
-
23-12-2019 - |
Вопрос
Я сделал это до сих пор
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) локальными.
Не связан с StackOverflow