Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

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

Как реализовать поиск всех анаграмм подстроки в строке?

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

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

Поиск анаграмм реализуется с помощью скользящего окна и частотных таблиц символов. Сначала считается частота символов искомой подстроки, затем окно той же длины «скользит» по строке. При совпадении частот найдено вхождение. Такой алгоритм работает за линейное время.

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

Задача поиска анаграмм — классический пример применения техники sliding window.

Что такое анаграмма в этой задаче

Анаграмма — это:

  • те же символы

  • в любом порядке

  • с тем же количеством повторений

Порядок символов не важен, важна частота.

Наивный подход и его проблема

Наивное решение:

  • брать каждую подстроку

  • сортировать символы

  • сравнивать с отсортированным образцом

Минусы:

  • сортировка на каждом шаге

  • сложность выше линейной

Эффективный подход: sliding window

Идея:

  1. Построить частотную карту подстроки pattern

  2. Вести частотную карту текущего окна в строке

  3. Сдвигать окно на один символ

  4. Обновлять частоты, не пересчитывая всё заново

Пример базовой логики

// частоты pattern и текущего окна сравниваются
// если совпали — найдено вхождение

Важно:

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

  • добавляем символ справа

  • убираем символ слева

Почему это эффективно

  • каждый символ добавляется и удаляется один раз

  • нет вложенных циклов

  • сложность O(n)

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

Поиск анаграмм подстроки в строке эффективно решается через скользящее окно и частотные карты. Это позволяет избежать перебора и сортировки.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • JavaScript

    JavaScript

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

#anagram

#search

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