接受CodeWar挑战赛。苦苦于修复我的代码,这样如果字符串输入的长度为0,它将显示0而不是nil。
代码如下:(建议?)
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
if s.length == nil
a.max = 0
end
end
j -= 1
end
i += 1
end
a.max
end
答案 0 :(得分:1)
首先,我想指出您发布的代码的几个问题。
最内层if语句的主体是从不执行,因为
0 != nil
这意味着即使s.length评估为零
s.length == nil
仍然是假的。
我想指出的另一个问题是
a.max = 0
会抛出一个如下所示的错误:
未定义的方法
max=' for []:Array (repl):17:in
longest_palindrome' (repl):1:在`initialize'
您无法直接设置最大值。你之前从未遇到过这个错误的原因是因为我上面提到的第一个问题。
现在回答你的问题。有很多方法可以做你想要的。例如,您可以检查输入字符串是否为空 在代码的开头,如果是,则立即返回0 从不执行while循环。也许有类似
的东西return 0 if string.empty?
在代码的开头。
但是从你的问题来看,我认为你所看到的更像是以下内容:
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
感兴趣的是第二行,确保转换 a.max 使用 to_i 方法转换为整数。在nil上调用此方法会将其转换为0。 此外,请注意我已更改代码以解决我之前强调的问题。