我正在尝试解决Ruby中最长的回文问题,我在stackoverflow上找到了答案:
回答:
假设字符串有 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)
但是我不明白为什么当我检测到第一个满足条件的数组时 ana 会是 ["r", "a", "c", "e", "c", "a" , "r"] 所以这不应该在 ana 中吗?