Палиндром - это последовательность (например, слово или комбинация букв / цифр), которая может читать одно и то же вперед и назад. Написание функции, которая определяет, является ли ввод палиндромом, является одним из наиболее распространенных вопросов, которые может задать интервьюер.

Есть много способов написать этот алгоритм, и я покажу вам способ проверки палиндромов в Javascript, используя объекты и случайную строку в качестве входных данных.

Прежде чем писать функцию, давайте шаг за шагом подумаем о проблеме. Мы хотим, чтобы функция возвращала истину или ложь в зависимости от ввода функции. Чтобы визуализировать функцию, я люблю использовать примеры. Если бы мы использовали в качестве входных данных «aabb», функция должна была бы вернуть true. Если введено «aaab», функция должна вернуть false. Далее, псевдокодирование или написание комментариев могут помочь разобраться в том, как писать функцию шаг за шагом.

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

Использование встроенных методов, таких как .reverse, не идеально, поскольку наша функция будет получать в качестве входных данных случайный набор букв. Например, функция определит, что «bob», «obb» и «bbo» являются палиндромами. Чтобы проверить, является ли случайная строка палиндромом, нам нужно отслеживать, сколько вхождений имеет каждая буква. Один из способов сделать это - создать объекты, сохраняя букву в качестве ключа и количество вхождений в качестве значения.

Первый цикл создает пары ключ / значение для каждой буквы. Переменная obj создает пустой объект, в котором мы будем хранить букву в качестве ключа и количество вхождений в качестве значения. Условное выражение внутри цикла либо создаст новую пару ключ / значение со значением, установленным на 1, либо увеличит значение, если ключ уже существует.

Переменная countValue представляет собой массив значений из переменной obj. Затем выполняется итерация countValue, чтобы собрать только нечетное количество вхождений, которое хранится в переменной oddCount. Поскольку палиндром может содержать только одно или менее одного числа нечетных вхождений, мы можем использовать простое условное выражение, чтобы определить, является ли вход палиндромом или нет.

Если мы хотим определить, является ли слово палиндромом, функцию можно написать гораздо более кратко, используя встроенные функции.

Эта функция создаст массив строки, перевернет его и объединит элементы в массиве в строку. Если строка равна управляемой строке, функция вернет true. Важно отметить, что это не работает для строк со случайными буквами.