Проверка, являются ли две строки взаимными перестановками

Строки являются перестановками друг друга, если для каждого символа совпадает число вхождений. Одного сравнения множеств символов недостаточно: оно теряет повторы.

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

Что ответить на собеседовании

Строки являются перестановками друг друга, если для каждого символа совпадает число вхождений. Одного сравнения множеств символов недостаточно: оно теряет повторы.

Подробный разбор

Ответ с пояснениями

Условие

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

Ответ

Строки являются перестановками друг друга, если для каждого символа совпадает число вхождений. Одного сравнения множеств символов недостаточно: оно теряет повторы.

static boolean isPermutation(String a, String b) {
    java.util.Objects.requireNonNull(a);
    java.util.Objects.requireNonNull(b);
    var counts = new java.util.HashMap<Integer, Integer>();
    a.codePoints().forEach(c -> counts.merge(c, 1, Integer::sum));
    b.codePoints().forEach(c -> counts.merge(c, -1, Integer::sum));
    return counts.values().stream().allMatch(n -> n == 0);
}

Время в среднем O(n+m), память O(k) для разных Unicode code points. Регистр, пробелы и пунктуация значимы; нормализация Unicode не выполняется. Например, aab и abb не являются перестановками, хотя множества букв у них одинаковы.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее