---
round: 1
ticket_no: 14
source_no: 9
slug: group-anagrams
topic: Hash Table
difficulty: Medium
leetcode_id: 49
attempted: true
score: 2
verdict: partial
reviewed_at: 2026-09-12
---

# Билет 14 — Group Anagrams

## Условие (как предъявлено)

Дан массив строк `strs`. Нужно сгруппировать анаграммы вместе. Порядок групп и порядок строк внутри группы не важен.

```
Input:  strs = ["eat","tea","tan","ate","nat","bat"]
Output: [["bat"],["nat","tan"],["ate","eat","tea"]]
```

Constraints: `1 <= n <= 10^4`, `0 <= длина строки <= 100`.

## Ответ

> Давай прослушаем, здесь получается. Но на грамма это всегда хэш с накоплением числа происходит. Значит, ну не знаю, берем первый элемент, считаем его хэш. Вот так. Давай так. Предположим, мы для каждого элемента посчитали хэш. На дальше мы взяли, ну конечно, много по памяти нас тут будет, но предположим, дальше мы берем... То есть у нас есть хэш, хэшей. То есть элемент, идентификатор это. А как мы будем потом искать? Нет, так неудобно. Ладно, всё в лоб. То есть мы берем первый, дальше. Короче, нам нужно найти у кого такая же анаграмма, да? Так, не пойму.Так, давай такую идею. Значит, у нас появляется. Берем первый элемент, у нас есть список групп. У нас вот группа анаграмм, в результате должно прийти. Сначала всё пусто. Вот появляется первый элемент, соответственно, у нас появляется первая группа. То есть мы видим сначала, что посчитаем хэш для данного слова. Видим, что такой группы нет, потому что у нас вообще их нету. Добавляем, то есть в результате у нас получается, группы у нас сейчас будут представлены хэшем. Ключ — это хэш анаграмм, а значение — это список слов, которые там есть. Соответственно, берем следующее слово, ищем по этому ключу группу, в которую она может войти. Есл такая есть, добавляем туда, если нет, то добавляем новую группу. Вот первое такое решение.

## Разбор

**Что верно:** структура выбрана правильно: hash, где ключ — подпись анаграммы, значение — список слов; проход с добавлением в существующую группу или созданием новой.

**Что упущено и ошибки:** главное не проговорено: что именно является ключом. В ответе ключ остался «хэшем анаграммы», хотя это либо отсортированная строка (word.chars.sort.join), либо частотный массив/строка из 26 счётчиков. Без этого решение не воспроизводится. Не названа сложность (O(n·k log k) с сортировкой против O(n·k) с частотным ключом).

**Эталонная идея:** strs.each_with_object(Hash.new { |h, k| h[k] = [] }) { |s, h| h[s.chars.sort] << s }.values; либо ключ — s.each_char.tally.

**Сложность:** время O(n·k log k), память O(n·k); с частотным ключом O(n·k)

**Критерии:** идея ✅ · структура данных ✅ · сложность ❌ · граничные случаи ❌


**Разбор задачи:** [`../../algo-solutions/01-must-have/02-hash-table/09-group-anagrams.md`](../../algo-solutions/01-must-have/02-hash-table/09-group-anagrams.md)
