我正在解决HackerRank中的palindrome index问题,如下所述。
有些单挑会顺利进行。谢谢!
这是我的代码:
# Complete the palindromeIndex function below.
def palindromeIndex(s)
# slen = s.length
splt = s.split('')
n = s.reverse
nsplt = n.split('')
if n == s
return -1
elsif n != s
splt.each do |p|
if nsplt[p] != splt[p]
return p
end
end
else
return -1
end
end
在第一行中,我首先拆分给定的字符串及其相应的反向形式。然后,我尝试将原始字符串与反向字符串进行比较。如果它们相等,则我的程序应返回-1。如果没有,我应该遍历最初分割的字符串,并检查索引是否无差异,并返回与主字符串不同的字符位置。
到目前为止,我不确定我是否正确,但是我在第一次尝试中也遇到了错误。
solution.rb:18:in `block in palindromeIndex': no implicit conversion of String into Integer (TypeError)
from solution.rb:17:in `each'
from solution.rb:17:in `palindromeIndex'
from solution.rb:34:in `block in <main>'
from solution.rb:31:in `times'
from solution.rb:31:in `<main>'
我在这里可能出什么问题了?
splt.each do |p|
以上返回s
中的每个字符,而不是字符的位置。这就是为什么您收到错误消息的原因...对于“ abba”,您正在执行splt['a']
而不是splt[0]
如果您想担任职位,您可以做each_with_index
splt.each_with_index do |_, p|
由于您不需要角色本身,因此我们在迭代中为其指定了下划线_
。
或者,您可以使用整数范围
(0...splt.length).each do |p|
在该范围内使用三个点,这意味着长度比零少一到零,因为五个字符的字符串仅具有从0到4的标记。