每次运行此代码时:
ana = arr.each_cons(n).detect { |b| b == b.reverse }
ana
获取新值。
detect
将返回第一个回文元素或
nil
所以在这种情况下
n
是没有回文的长度,
安娜
将
无
.
return ana.join if ana
表示“如果
安娜
为true(例如非零),返回
ana.join
“。在您修改的代码中,有时
安娜
无
,而你试图
join
不管怎么说。
如果添加一些日志记录,可能更容易理解代码:
def longest_palindrome(str)
arr = str.downcase.chars
str.length.downto(1) do |n|
puts "n = #{n}"
ana = arr.each_cons(n).detect { |b| b == b.reverse }
if ana == nil then
puts "ana is nil"
else
puts "ana = #{ana.join}"
end
return ana.join if ana
end
end
puts longest_palindrome('a racecar')
输出:
n = 9
ana is nil
n = 8
ana is nil
n = 7
ana = racecar
racecar
正如你所见,
安娜
是
无
直到你穿7号。