Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: anagram, index

Как найти все индексы вхождения подстроки с учётом анаграмм?

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

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

Для поиска всех индексов используется тот же алгоритм со скользящим окном. При каждом совпадении частот текущего окна с эталоном сохраняется индекс начала окна. В результате возвращается массив всех позиций. Алгоритм остаётся линейным по времени.

Длинный ответ

Поиск индексов — это логическое расширение задачи поиска самих анаграмм.

Базовая идея

Используется тот же sliding window, но дополнительно:

  • отслеживается текущая позиция окна

  • при совпадении частот сохраняется индекс

Последовательность действий

  1. Подготовка

    • частотная карта подстроки

    • пустой массив результатов

  2. Инициализация окна

    • первые k символов строки

  3. Сдвиг окна

    • добавление нового символа

    • удаление старого

  4. Проверка совпадения

    • если карты равны → push(startIndex)

Упрощённый пример структуры

const result = []

// при совпадении:
result.push(startIndex)

На что важно обратить внимание

  • корректное обновление частот при сдвиге

  • одинаковый размер окна

  • аккуратная работа с символами, частота которых стала нулевой

Возможные оптимизации

  • использование массивов вместо объектов для ограниченного алфавита

  • счётчик совпавших символов вместо полного сравнения карт

Краткий вывод

Все индексы анаграмм находятся тем же алгоритмом скользящего окна, что и одиночные вхождения. Разница лишь в накоплении результатов, а асимптотика остаётся линейной.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#anagram

#index

Подпишись на React Developer в телеграм