以下是可正常工作的回文方法:
def palindrome?(string)
i = 0
while i < string.length
if string[i] != string[(string.length - 1) - i]
return false
end
i += 1
end
return true
end
# These are tests to check that your code is working. After writing
# your solution, they should all print true.
puts('palindrome?("abc") == false: ' + (palindrome?('abc') == false).to_s)
puts('palindrome?("abcba") == true: ' + (palindrome?('abcba') == true).to_s)
puts('palindrome?("z") == true: ' + (palindrome?('z') == true).to_s)
puts('palindrome?("2220222") == true: ' + (palindrome?('2220222') == true).to_s)
puts('palindrome?("2220922") == false: ' + (palindrome?('2220922') == false).to_s)
以下是我无法理解的事情:
a)如果while循环之外的表达式false
在循环结束后总是返回return true
,则该方法如何返回true
,覆盖之前的任何return false
语句?
b)如果是假的回文,例如2220922,为什么while循环返回false
,即使最后一次迭代(string [5]!= string [0])比较2到2,这应该评估真的吗?
答案 0 :(得分:2)
这两个问题都是真的。 返回false将退出该方法并返回false,它永远不会返回true。
只有当两个角色不匹配时才会发生这种情况
所以2220922 它比较
2 2 in the first pass
2 2 in the next
2 9 in the 3rd and returns false.
第3遍i = 2,以便7 - 1 - 2 = 4,字符串中的第4个字符为9
使行为更清晰的另一种选择是
def palindrome?(string)
result = true
i = 0
while (i < string.length) && result
result = string[i] != string[(string.length - 1) - i]
i += 1
end
return result
end
说你知道string == string.reverse会有效吗?