Сборка групп анаграмм из списка слов

Ключом группы сделайте отсортированный набор символов слова. Только слова с одинаковыми буквами и их количествами являются анаграммами; перечисленные в условии пары не обязательно удовлетворяют этому.

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

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

Ключом группы сделайте отсортированный набор символов слова. Только слова с одинаковыми буквами и их количествами являются анаграммами; перечисленные в условии пары не обязательно удовлетворяют этому.

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

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

Условие

Дан список строк, необходимо собрать все слова‑анаграммы в отдельные подмассивы, например: [["вертикаль", "компактер"], ["апельсин", "спанислы"], ...]

В качестве примера массива используем следующий набор данных:


const arr = [
    "вертикаль",
    "компактер",
    "апельсин",
    "спанислы",
    "австралистик",
    "ватерполистка",
    "кластер",
    "стансер",
    "стража",
    "корибль"
];

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

Ответ

Ключом группы сделайте отсортированный набор символов слова. Только слова с одинаковыми буквами и их количествами являются анаграммами; перечисленные в условии пары не обязательно удовлетворяют этому.

function groupAnagrams(words) {
  const groups = new Map();
  for (const word of words) {
    const key = [...word].sort().join('');
    if (!groups.has(key)) groups.set(key, []);
    groups.get(key).push(word);
  }
  return [...groups.values()];
}

Например, 'кот' и 'ток' объединятся. 'вертикаль' и 'компактер' имеют разные буквы, поэтому объединять их ради примера нельзя. Регистр и символы учитываются буквально; при необходимости нормализацию согласуют отдельно. Для n слов длины до m время O(n·m log m), дополнительная память пропорциональна данным.

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

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

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

Подробнее