Индекс палиндрома в ХакерРанк - PullRequest
0 голосов
/ 17 февраля 2020

Я решаю проблему индекса палиндрома из HackerRank, как описано ниже.

Некоторые хедз-апы будут go по пути. Спасибо!

Вот мой код:

# 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. Если нет, то я должен l oop пройти через изначально разделенные строки, проверить индексы на любое безразличие и вернуть позицию символа, отличную от основной строки.

Пока я не уверен, что я правильно понял, но я также получаю сообщение об ошибке при первой попытке.

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>'

В чем я могу ошибаться?

1 Ответ

2 голосов
/ 17 февраля 2020
splt.each do |p|

Приведенное выше возвращает каждый из символов в s, а не позиции символов. Вот почему вы получаете сообщение об ошибке ... для "abba" вы делаете splt['a'] не splt[0]

Если вы хотите, чтобы позиция, которую вы можете сделать каждый_with_index

splt.each_with_index do |_, p|

Поскольку сам символ не требуется, мы присвоили ему подчеркивание _ в итерации.

В качестве альтернативы вы можете использовать диапазон целых чисел

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

Примечание использование ТРИ точки в диапазоне, что означает от нуля до единицы меньше длины, поскольку строка из пяти символов будет иметь только знаки от 0 до 4.

Или вы можете просто сделать l oop сколько раз встречаются символы ...

splt.length.times do |p|
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...