Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: linear, algorithm

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

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

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

Для линейного времени используется подсчет символов.
Алгоритм проходит по строкам один раз.
Используется массив или Map для частот.
Временная сложность O(n).
Это оптимальное решение задачи.

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

Чтобы добиться линейной сложности, нужно отказаться от сортировки.

Идея алгоритма

Определение:
Алгоритм подсчета символов сравнивает частоту каждого символа в двух строках.

Шаги алгоритма

Перед выполнением важно проверить длину строк.

Основные шаги:

  1. Создать массив или Map счетчиков.

  2. Пройти по первой строке и увеличить счетчики.

  3. Пройти по второй строке и уменьшить счетчики.

  4. Проверить, что все значения равны нулю.

Пример для ASCII

int[] freq = new int[256];

for (char c : s1.toCharArray()) {
    freq[c]++;
}
for (char c : s2.toCharArray()) {
    freq[c]--;
}

Если:

  • все freq[i] == 0
    то строки — анаграммы.

Почему это O(n)

  1. Каждый символ обрабатывается один раз.

  2. Нет вложенных циклов.

  3. Размер вспомогательной структуры фиксирован.

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

Подсчет символов позволяет проверить анаграммы за O(n), что делает этот алгоритм оптимальным по времени.

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • Java

    Java

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

#linear

#algorithm

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