HackerRank中的回文指数

问题描述 投票:0回答:1

我正在解决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>'

我在这里可能出什么问题了?

ruby palindrome
1个回答
0
投票
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的标记。

© www.soinside.com 2019 - 2024. All rights reserved.