Группировка слов списка по анаграммам

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

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

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

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

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

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

Условие

Дан набор строк. Необходимо объединить их в группы, где каждая группа состоит из слов‑анаграмм — слов, содержащих одинаковый набор букв, но расположенных в разном порядке. При формировании групп регистр символов и пробелы не учитываются.

public static void main(String[] args) {
    List<String> anagrams = List.of("Race", "NIght", " Angel", "Care",  "angel",  "ThiNG",  "angel",  "angel") ;
    System.out.println(removeAnagrams(anagrams));
}

Ответ

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

static List<List<String>> removeAnagrams(List<String> words) {
    Map<String, List<String>> groups = new LinkedHashMap<>();
    for (String word : words) {
        String normalized = word.toLowerCase(java.util.Locale.ROOT);
        int[] points = normalized.codePoints()
                .filter(c -> !Character.isWhitespace(c) && !Character.isSpaceChar(c))
                .sorted().toArray();
        String key = new String(points, 0, points.length);
        groups.computeIfAbsent(key, k -> new ArrayList<>()).add(word);
    }
    return new ArrayList<>(groups.values());
}

Импорты коллекций из java.util. Получатся группы Race/Care, NIght/ThiNG и все варианты Angel/angel. Несмотря на название removeAnagrams, условие требует группировки, не удаления. Время — сумма O(m log m) по длинам слов.

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

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

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

Подробнее