最長の一般的な部分文字列のバグ
-
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)"は実行されていません。ただし、elseステートメントの開始後に値が大丈夫であることを確信しています。 私は助けを感謝します。
解決
あなたのxs
変数はGlobal
l1 = lcs(xstr, ys)
l2 = lcs(xs, ystr)
.
最初の行は、2行目で使用されるxs
値を破損します。
すべての一時的な変数(X、Y、XS、YS、L1、L2)をローカルにします。
所属していません StackOverflow