Нахождение зеркального указателя в палиндроме + javascript - PullRequest
0 голосов
/ 28 апреля 2020

Мой код:

function palindrome(str) {
    return str.split('').every((char, i) => {
        return char === str[str.length - i - 1] ? true : false;
    })
}

palindrome('abcba');

При использовании отладчика и console.log я понимаю, почему в операторе сравнения мы пишем - i, потому что это приводит нас к правильному индексу на противоположной стороне, но как кто-нибудь знает, что делать это с самого начала?

Существует ли какое-либо объяснение или диаграмма, которая объясняет, как или почему - i приведет вас к индексу символа на противоположной стороне? Просто было трудно правильно обернуть это вокруг меня.

Любая помощь очень ценится, хотя я думаю, что это трудно объяснить.

1 Ответ

0 голосов
/ 28 апреля 2020

Хорошо, давайте разберемся.

str.split('')

Эта строка разбивает вашу строку 'abcba' на массив. Результат будет:

['a', 'b', 'c', 'b', 'a']

Теперь, когда у вас есть массив, вы можете использовать l oop и выбрать определенные индексы из массива. Это очень полезно в случае палиндрома.

Поскольку вы хотите знать, совпадает ли слово при отражении. И вы понимаете это, начиная с головы и хвоста массива.

Первый элемент в массиве является индексом 0 [0], а последний - хорошо, что зависит от массива. Но если у вас есть массив и и вычтите [array.length - 1], что в слове abcba равно [5 - 1], и вы в итоге получите последний элемент в массиве с индексом 4 [4].

// First iteration.
// First and last items in array.
// [0] and [array.length - 1] or [4].

  ↓                   ↓
['a', 'b', 'c', 'b', 'a']

Таким образом, в l oop you go слева направо в вашем массиве. И сравните первое значение с последним значением. В вашем примере используется метод every, который в конце возвращает true, если каждое условие в вашем l oop вернуло true, или false, если это не так.

l oop также предоставляет текущее значение индекса. В вашем примере это i, сокращение от index . Если вы закончили сравнение первого и последнего значения, вы хотите перейти к следующему элементу в массиве, чтобы начать сравнение второго и первого с последним значением. Отсюда и формула.

str.split('').every((char, i) => {
  return char === str[str.length - i - 1] ? true : false;
});

На первой итерации значение i равно 0. Итак, у вас есть формула: length of the array, subtract 0 and subtract 1. Что дает вам последний элемент.

Во второй итерации i теперь равно 1. Это означает, что мы находимся во втором элементе массива. Если вы снова примените i к формуле, вы можете начать обратный отсчет с конца массива: length of the array, subtract 1 and subtract 1. Что в сумме составляет -2.

// Second iteration.
// Second and first to last item in array.
// [1] and [array.length - 2] or [3].

       ↓         ↓
['a', 'b', 'c', 'b', 'a']

И при следующей итерации вы получаете перекрытие, но не в случаях с четным словом. Но здесь они оба проверяют, совпадает ли c с c.

// Third iteration.
// Third and and second to last item in array.
// [2] and [array.length - 3] or [2].

            ↓
            ↓
['a', 'b', 'c', 'b', 'a']

И так продолжается до тех пор, пока не будет достигнут последний элемент в массиве с продолжающимся отсчетом l oop и формулой обратный отсчет.

Надеюсь, это имеет смысл и поможет вам понять его немного подробнее.

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