HackerBank中的回文索引



我正在解决HackerBank的回文索引问题,如下所述。

一路上会有一些提醒。非常感谢。

这是我的代码:

# 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]

如果你想要这个职位,你可以用索引做每一件事

splt.each_with_index do |_, p|

由于您不需要字符本身,我们在迭代中为其指定了下划线_

或者,您可以使用一系列整数

(0...splt.length).each do |p|

请注意,在该范围内使用了三个点,这意味着从零到比长度少一个,因为一个由五个字符组成的字符串只有从0到4的标记。

或者,你可以简单地对有字符的次数进行循环。。。

splt.length.times do |p|

最新更新