![](/img/trans.png)
[英]Does the Ruby method lookup start from the bottom of a class and go up, or from the top and go down?
[英]Going from a top-down to a bottom-up algorithm (DP)
我創建了此算法來計算最長的回文序列(在鏡像時相同的詞,即“ aba”,“ racecar”),並使用遞歸自頂向下方法進行了計算。 我知道有可能將它們從下往上轉換為迭代算法,但是我很難看到如何實現
我的密碼
def palindrome(string, r = {})
return 1 if string.length == 1
return 2 if string[0] == string[1] and string.length == 2
return r[string] if r.include?(string)
n = string.length
if string[0] == string[n-1]
r[string] = palindrome(string[1..n-2],r) + 2
else
r[string] = [palindrome(string[0..n-2],r), palindrome(string[1..n-1],r)].max
end
end
當您從數組中獲取項目時使用負數時,該數組從末尾開始計數元素,因此您不必保留n
變量
if string[0] == string[-1] # <= same as string[n-1] r[string] = palindrome(string[1..-2],r) + 2 # <= same as string[1..n-2]
我不知道這有多好,但是這是一個自上而下的建議:
def palindrome(string) chars = string.chars chars.length.downto(1).find do |length| chars.each_cons(length).any? { |cons| cons == cons.reverse } end end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.