Функция определения палиндромности строки

Используйте два индекса: пропускайте незначимые символы с краёв и сравнивайте буквы в одинаковом регистре. Новая нормализованная строка не нужна.

Короткий ответ

Что ответить на собеседовании

Используйте два индекса: пропускайте незначимые символы с краёв и сравнивайте буквы в одинаковом регистре. Новая нормализованная строка не нужна.

Подробный разбор

Ответ с пояснениями

Условие

Создайте функцию, которая проверяет, является ли переданная строка палиндромом — т.е. читается одинаково слева направо и справа налево, при этом не учитывая регистр, пробелы и знаки пунктуации.

Примеры строк‑палиндромов:

  • Казак
  • А роза упала на лапу Азора
  • Do geese see God?
  • Madam, I’m Adam

Дополнительное требование: использовать лишь постоянный объём дополнительной памяти — O(1).

Ответ

Используйте два индекса: пропускайте незначимые символы с краёв и сравнивайте буквы в одинаковом регистре. Новая нормализованная строка не нужна.

Для латиницы, кириллицы и цифр из примеров:

function isPalindrome(text) {
  const significant = char => /[a-zа-яё0-9]/i.test(char);
  let left = 0, right = text.length - 1;
  while (left < right) {
    while (left < right && !significant(text[left])) left++;
    while (left < right && !significant(text[right])) right--;
    if (text[left].toLowerCase() !== text[right].toLowerCase()) return false;
    left++; right--;
  }
  return true;
}

Время O(n), вспомогательная память O(1). Полная Unicode-нормализация и составные графемы требуют расширения контракта; здесь явно ограниченный алфавит. Пустая или полностью игнорируемая строка считается палиндромом.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее