1
我試圖解決在Ruby中最長的迴文的問題,我發現在計算器的答案:紅寶石最長的迴文
答:
假設字符串中有n個字符。首先看看整個字符串是否是迴文。如果是,則返回字符串。菲尼!如果不是,請查看長度爲n-1的兩個子串中的任何一個是否是迴文。如果有,返回。如果不是,則檢查長度爲n-2的子字符串,依此類推。只要字符串至少包含一個字母,就可以找到最長的迴文。
def longest_palindrome(str)
arr = str.downcase.chars
str.length.downto(1) do |n|
ana = arr.each_cons(n).detect { |b| b == b.reverse }
return ana.join if ana
end
end
puts longest_palindrome "ilikeracecar"
但我無法理解這行:
return ana.join if ana
是什麼
if ana
是什麼意思?
此外,爲什麼不能正常工作?
def longest_palindrome(str)
arr = str.downcase.chars
str.length.downto(1) do |n|
ana = arr.each_cons(n).detect { |b| b == b.reverse }
return ana.join
end
end
當我運行它,它給了我
undefined method `join' for nil:NilClass (NoMethodError)
但我不明白爲什麼會全日空是nil當我發現符合這將是[條件」的第一個數組r「,」a「,」c「,」e「,」c「,」a「,」r「],所以不應該在ana中?