Ключом группы сделайте отсортированный набор символов слова. Только слова с одинаковыми буквами и их количествами являются анаграммами; перечисленные в условии пары не обязательно удовлетворяют этому.
Сборка групп анаграмм из списка слов
Ключом группы сделайте отсортированный набор символов слова. Только слова с одинаковыми буквами и их количествами являются анаграммами; перечисленные в условии пары не обязательно удовлетворяют этому.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дан список строк, необходимо собрать все слова‑анаграммы в отдельные подмассивы, например: [["вертикаль", "компактер"], ["апельсин", "спанислы"], ...]
В качестве примера массива используем следующий набор данных:
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), дополнительная память пропорциональна данным.