【发布时间】:2017-03-31 01:09:28
【问题描述】:
我正在尝试在 Ruby 中实现最长公共子序列算法,但我收到了 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
n.b.我试图返回子序列本身,而不是它的长度。
【问题讨论】:
-
您应该首先解释“最长公共子序列”的含义。
-
您可能想看看triez。它有一个关于这个确切问题的例子。
-
@CarySwoveland: en.wikipedia.org/wiki/Longest_common_substring_problem
标签: ruby algorithm subsequence