为什么在我的方法中,字符串'xabcx'返回为回文字符串?(Ruby)

3

我在进行一些App Academy Open的练习,遇到了一个我无法理解的测试案例。我已经编写了一个方法来检测给定字符串是否为回文,对于我测试的所有字符串,它似乎都能正常工作 - 除了'xabcx'。我是不是漏掉了什么?

def palindrome?(str)
  (str.length / 2).times do |idx|
    if str[idx - 1] != str[idx * -1]
      return false
    end
  end
  true
end

p palindrome?("xabcx")

我期望得到false的输出结果,但实际上却得到了true。对于我尝试的其他单词,该方法都能如预期地工作。


3
idx 的第一个值是 0,而不是 1。您想要的是 if str[idx] != str[-1-idx] - Cary Swoveland
@CarySwoveland 就是这样!谢谢! - nashsibanda
1个回答

2

正如Cary Swoveland已经指出,您的索引是错误的。为了使下一次调试更容易,我建议在每次循环迭代时打印出您使用的索引值以及从字符串中选择的实际字符的值。

作为另一种更短、更简单的替代版本,您也可以使用:

最初的回答:

def palindrome?(str)
  str == str.reverse
end

"最初的回答" - 或者考虑忽略大小写:

或- 考虑忽略大小写:

def palindrome?(str)
  str.downcase == str.downcase.reverse
end

"而且更短、更简单的版本" - 但是会浪费更多资源。需要O(N)的内存。供您参考。 - Sergio Tulentsev
感谢您的评论和建议。有关问题的练习明确禁止使用反转功能,但将downcase添加到方法中是一个好主意! - nashsibanda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接