gpt4 book ai didi

ruby - 最长公共(public)子序列——我的无限循环在哪里?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:42:36 27 4
gpt4 key购买 nike

我试图在 Ruby 中实现最长公共(public)子序列算法,但我收到了 stack level too deep 错误消息。我知道这可能意味着我有一个无限循环,但我无法发现它。下面是我最好的尝试——我哪里出错了?

def lcs(string1, string2)
if !(string1.chars.any? { |x| string2.include?(x)})
return ""
elsif string1[-1] == string2[-1]
return lcs(string1[0..-2], string2[0..-2]) + string1[-1]
else
x = lcs(string1, string2[0..-1])
y = lcs(string1[0..-1], string2)
x.length > y.length ? x : y
end
end

注意我试图返回子序列本身,而不是它的长度。

最佳答案

尝试使用示例字符串:abcdbc 并单步执行。

你会发现这两行有问题:

x = lcs(string1, string2[0..-1])
y = lcs(string1[0..-1], string2)

因为 'abcd'[0..-1] -> 'abcd' 所以当它到达 x = ... 行时它会卡住。

它应该是[0..-2]

此外,您可以使用 if string1.chars.none? { |x| string2.include?(x)}替换 if !(string1.chars.any? { |x| string2.include?(x)})

关于ruby - 最长公共(public)子序列——我的无限循环在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43130816/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com