Цель: создать функцию
palindrome(str)
, которая возвращает нормализованную строку, если она палиндром; иначе —null
.
/**
* Функция проверки строки на палиндром
* Палиндром - строка, которая читается одинаково в обоих направлениях.
* Функция нормализует строку, удаляя все не-буквенно-цифровые символы,
* приводит к нижнему регистру, затем проверяет на совпадение с обратной версией.
*
* @param {string} str - Входная строка для проверки
* @returns {string|null} Нормализованную строку-палиндром или null, если строка не палиндром
*/
function palindrome(str) {
// Создаем нормализованную версию строки:
const cleaned = str
// Приводим все символы к нижнему регистру для регистронезависимого сравнения
.toLowerCase()
// Удаляем все символы, кроме:
// - цифр (0-9)
// - латинских букв (a-z)
// - русских букв (а-я, включая букву ё)
// Флаг 'gi' означает:
// g - глобальный поиск (всей строки)
// i - игнорирование регистра
.replace(/[^0-9a-zа-яё]/gi, '');
// Проверяем, является ли строка палиндромом:
// 1. Разбиваем строку на массив символов (split(''))
// 2. Разворачиваем массив (reverse())
// 3. Собираем обратно в строку (join(''))
// 4. Сравниваем с оригинальной нормализованной строкой
return cleaned === cleaned.split('').reverse().join('')
? cleaned // Если палиндром - возвращаем нормализованную строку
: null; // Если не палиндром - возвращаем null
}
Почему именно так:
null
./**
* Функция проверки строки на палиндром с оптимизированным алгоритмом
* Проверяет, читается ли строка одинаково в обоих направлениях,
* используя алгоритм двух указателей для эффективной проверки.
*
* @param {string} str - Входная строка для проверки
* @returns {string|null} Нормализованную строку без спецсимволов в нижнем регистре,
* если строка является палиндромом, иначе null
*/
function palindrome(str) {
// 1. Нормализация входной строки:
const cleaned = str
// Приведение к нижнему регистру для регистронезависимого сравнения
.toLowerCase()
// Удаление всех не-буквенно-цифровых символов:
// - сохраняем цифры (0-9)
// - латинские буквы (a-z)
// - русские буквы (а-яё)
// Флаги:
// g - глобальный поиск по всей строке
// i - игнорирование регистра (хотя toLowerCase уже применен)
.replace(/[^0-9a-zа-яё]/gi, '');
// 2. Алгоритм двух указателей для проверки палиндрома:
let left = 0; // Левый указатель (начало строки)
let right = cleaned.length - 1; // Правый указатель (конец строки)
// Пока указатели не встретились в середине
while (left < right) {
// Сравниваем символы на позициях указателей
if (cleaned[left] !== cleaned[right]) {
return null; // Не совпадает - не палиндром
}
// Сдвигаем указатели к центру
left++;
right--;
}
// 3. Если все символы совпали - возвращаем нормализованную строку
return cleaned;
}
Почему именно так:
Напишите функцию palindrome
, которая возвращает нормализованную строку, если входная строка является палиндромом, и null
— если нет. Нормализация: нижний регистр, удаление неалфанумерических символов.
palindrome('level'); // 'level'
palindrome('RaceCar'); // 'racecar'
palindrome('A man, a plan, a canal: Panama!'); // 'amanaplanacanalpanama'
palindrome('hello'); // null
palindrome
null
Цель: создать функцию
palindrome(str)
, которая возвращает нормализованную строку, если она палиндром; иначе —null
.
/**
* Функция проверки строки на палиндром
* Палиндром - строка, которая читается одинаково в обоих направлениях.
* Функция нормализует строку, удаляя все не-буквенно-цифровые символы,
* приводит к нижнему регистру, затем проверяет на совпадение с обратной версией.
*
* @param {string} str - Входная строка для проверки
* @returns {string|null} Нормализованную строку-палиндром или null, если строка не палиндром
*/
function palindrome(str) {
// Создаем нормализованную версию строки:
const cleaned = str
// Приводим все символы к нижнему регистру для регистронезависимого сравнения
.toLowerCase()
// Удаляем все символы, кроме:
// - цифр (0-9)
// - латинских букв (a-z)
// - русских букв (а-я, включая букву ё)
// Флаг 'gi' означает:
// g - глобальный поиск (всей строки)
// i - игнорирование регистра
.replace(/[^0-9a-zа-яё]/gi, '');
// Проверяем, является ли строка палиндромом:
// 1. Разбиваем строку на массив символов (split(''))
// 2. Разворачиваем массив (reverse())
// 3. Собираем обратно в строку (join(''))
// 4. Сравниваем с оригинальной нормализованной строкой
return cleaned === cleaned.split('').reverse().join('')
? cleaned // Если палиндром - возвращаем нормализованную строку
: null; // Если не палиндром - возвращаем null
}
Почему именно так:
null
./**
* Функция проверки строки на палиндром с оптимизированным алгоритмом
* Проверяет, читается ли строка одинаково в обоих направлениях,
* используя алгоритм двух указателей для эффективной проверки.
*
* @param {string} str - Входная строка для проверки
* @returns {string|null} Нормализованную строку без спецсимволов в нижнем регистре,
* если строка является палиндромом, иначе null
*/
function palindrome(str) {
// 1. Нормализация входной строки:
const cleaned = str
// Приведение к нижнему регистру для регистронезависимого сравнения
.toLowerCase()
// Удаление всех не-буквенно-цифровых символов:
// - сохраняем цифры (0-9)
// - латинские буквы (a-z)
// - русские буквы (а-яё)
// Флаги:
// g - глобальный поиск по всей строке
// i - игнорирование регистра (хотя toLowerCase уже применен)
.replace(/[^0-9a-zа-яё]/gi, '');
// 2. Алгоритм двух указателей для проверки палиндрома:
let left = 0; // Левый указатель (начало строки)
let right = cleaned.length - 1; // Правый указатель (конец строки)
// Пока указатели не встретились в середине
while (left < right) {
// Сравниваем символы на позициях указателей
if (cleaned[left] !== cleaned[right]) {
return null; // Не совпадает - не палиндром
}
// Сдвигаем указатели к центру
left++;
right--;
}
// 3. Если все символы совпали - возвращаем нормализованную строку
return cleaned;
}
Почему именно так:
Напишите функцию palindrome
, которая возвращает нормализованную строку, если входная строка является палиндромом, и null
— если нет. Нормализация: нижний регистр, удаление неалфанумерических символов.
palindrome('level'); // 'level'
palindrome('RaceCar'); // 'racecar'
palindrome('A man, a plan, a canal: Panama!'); // 'amanaplanacanalpanama'
palindrome('hello'); // null
palindrome
null
Редактор кода намеренно скрыт на мобильном.
Поверь, так лучше: я оберегаю тебя от искушения писать код в неидеальных условиях. Маленький экран и виртуальная клавиатура — не лучшие помощники для программиста.
📖 Сейчас: Изучи задачу, продумай решение. Действуй как стратег.
💻 Потом: Сядь за компьютер, открой сайт и реализуй все идеи с комфортом. Действуй как код-джедай!