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中?