Skip to content

Latest commit

 

History

History
39 lines (26 loc) · 1.47 KB

group_words.md

File metadata and controls

39 lines (26 loc) · 1.47 KB

Группировка слов, состоящих из одних и тех же букв

Условие

Дан список слов, необходимо вернуть сгруппированный список слов, содержащих один и тот же набор букв.

Пример

Input: ["eat", "ate", "hello", "llo"]
Output: [["eat", "ate"], ["hello"], ["llo"]]

Input: ["eat", "ate", "eta", "llo"]
Output: [["eat", "ate", "eta"], ["llo"]]

Решение

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

Ну а далее просто вернем списки таких слов.

    static List<List<String>> groupWords(List<String> words) {
        Map<String, List<String>> result = new HashMap<>();

        for (String word : words) {
            char[] rawKey = word.toCharArray();
            Arrays.sort(rawKey);

            String key = String.valueOf(rawKey);

            List<String> store = result.computeIfAbsent(key, k -> new ArrayList<>());
            store.add(word);
        }

        return new ArrayList<>(result.values());
    }