Я пытаюсь решить самую длинную проблему палиндром в Ruby, и я нашел ответ на StackOverflow:Рубин длинный палиндром
ОТВЕТ:
Предположим, что строка имеет п символов. Сначала посмотрите, является ли целая строка палиндром. Если это так, верните строку. Фини! Если нет, посмотрите, является ли одна из двух подстрок длины 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)
Но я не понимаю, почему ана будет ноль, когда я обнаружил первый массив, который удовлетворяет условию, которое было бы [» r "," a "," c "," e "," c "," a "," r "], так ли это должно быть в ana?