Zuerst möchte ich ein paar Probleme mit dem Code hinzuweisen Sie auf dem Laufenden.
Der Körper des innersten if-Anweisung ist nie ausgeführt, weil
0 != nil
Das bedeutet, dass selbst wenn s.length
s.length == nil
noch falsch auf Null bewertet wird.
Ein weiteres Problem, das ich möchte darauf hinweisen, dass
a.max = 0
wirft einen Fehler, der wie folgt aussieht:
nicht definierte Methode max=' for []:Array (repl):17:in
longest_palindrome‘ (ers): 1: in `initialize '
Sie können den Maximalwert nicht direkt einstellen. Der Grund, warum Sie nie mit dem Code, den Sie gepostet haben, auf diesen Fehler stoßen, ist das erste Problem, das ich oben beschrieben habe.
Jetzt, um Ihre Frage zu beantworten. Es gibt viele Möglichkeiten, das zu tun, was du verlangst. Sie können zum Beispiel einfach prüfen, ob die Eingabezeichenfolge am Anfang des Codes leer ist, und sofort 0 zurückgeben, wenn es daher ist, die while-Schleifen nie auszuführen. Vielleicht mit etwas wie
return 0 if string.empty?
am Anfang des Codes.
Aber aus Ihrer Frage, ich denke, was Sie suchen etwas mehr wie das ist folgende:
def longest_palindrome(string)
i = 0
a = []
while !string[i..-1].empty?
j = -1
while !string[i..j].empty?
s = string[i..j]
if s.reverse == s
a << s.length
end
j -= 1
end
i += 1
end
a.max.to_i
end
Von Interesse ist dabei die zweite letzte Zeile, die sicher ist umgewandelt a.max macht zu einer ganzen Zahl unter Verwendung der to_i Methode. Wenn Sie diese Methode auf null setzen, wird sie in 0 konvertiert. Bitte beachten Sie, dass ich den Code geändert habe, um die Probleme zu beheben, die ich zuvor hervorgehoben hatte.