私はRubyで最長の回文の問題を解決しようとしている、と私はstackoverflowの上で答えを見つけました:ルビー最長の回文
ANSWER:
が文字列のn文字を持っていると仮定します。まず文字列全体が回文かどうかを確認します。そうであれば、文字列を返します。フィニ!そうでない場合、長さn-1の2つの部分文字列のいずれかが回文文字列かどうかを確認します。もしそうなら、それを返す。そうでない場合は、長さn-2の部分文字列などを調べます。文字列に少なくとも1文字が含まれている限り、最も長い回文が見つかります。
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がnilになる理由を私は理解していませんr、a、c、e、c、a、rなど]これはアナではないはずですか?