Bug de sous-chaîne commun le plus long
-
23-12-2019 - |
Question
Je l'ai fait jusqu'à présent
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"))
malheureusement, il n'imprime que "d" et non "bcd" comme prévu.Pour moi, il semble que la ligne "l2 = lcs(xs, ystr)" n'ait pas été exécutée car si j'ajoute une impression de débogage au début, elle affiche que la fonction n'a pas été appelée avec les arguments "bcd" et "bcd", mais je suis sûr que les valeurs vont bien après le début de l'instruction else.J'apprécierais toute aide.
La solution
Ton xs
la variable est globale
l1 = lcs(xstr, ys)
l2 = lcs(xs, ystr)
La première ligne corrompt xs
valeur utilisée par la deuxième ligne.
Rendez toutes vos variables temporaires (x, y, xs, ys, l1, l2) locales.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow