Дек (deque)
Двусторонняя очередь: добавление и снятие с обоих концов за O(1).
1function isPalindrome(s: string): boolean {2 const deque: string[] = s.split('')3 4 while (deque.length > 1) {5 if (deque.shift() !== deque.pop()) return false6 }7 8 return true9}Проблема
Стек даёт доступ только с одного конца, очередь — строго с двух в фиксированном порядке. А если нужно и добавлять, и снимать с обоих концов? Наивная реализация на массиве даёт O(n) на сдвиг.
Что вы видите
Строка-палиндром: указатели L и R снимают пары с краёв до середины.
Как это работает
Дек объединяет стек и очередь: push/pop работают с обоих концов. Проверка палиндрома — каноническая демо-задача: пока края совпадают, снимаем пару.
Пошаговый разбор
- 01
Снятие пары
popLeft + popRight, сравнение.
- 02
Сужение
Дек уменьшается с двух сторон.
- 03
Финал
Пусто или один символ — палиндром.
Complexity и ограничения
См. complexity в шапке страницы.
Edge cases
- Палиндром из одной буквы
Цикл не выполнится ни разу — сразу true.
- Чётная длина
L и R пересекаются, не встретившись — тоже палиндром.
- Разные первые же буквы
Расхождение на первом сравнении — мгевременный ответ.
Где встречается в реальности
Продукт
Классический приём в реальных системах.
Собеседования
Стандартный вопрос на понимание структуры.
«Снять с двух концов сразу: палиндром за n/2 пар»
Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.
Shorts 9:16
Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.