From 6e321081ca552af3abda16732d7e66090f315190 Mon Sep 17 00:00:00 2001 From: Falmer Date: Fri, 23 Jan 2026 13:02:11 +0300 Subject: [PATCH] Add AnagramGroupImpl --- .../c8_anagram_group/AnagramGroupImpl.java | 34 +++++++++++++++++++ .../ru/ilug/c8_anagram_group/MainTest.java | 12 ++++--- 2 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 src/main/java/ru/ilug/c8_anagram_group/AnagramGroupImpl.java diff --git a/src/main/java/ru/ilug/c8_anagram_group/AnagramGroupImpl.java b/src/main/java/ru/ilug/c8_anagram_group/AnagramGroupImpl.java new file mode 100644 index 0000000..19eda8b --- /dev/null +++ b/src/main/java/ru/ilug/c8_anagram_group/AnagramGroupImpl.java @@ -0,0 +1,34 @@ +package ru.ilug.c8_anagram_group; + +import lombok.extern.slf4j.Slf4j; + +import java.nio.CharBuffer; +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j +public class AnagramGroupImpl implements AnagramGroup { + + /** + * Группирует слова в группы анаграммы (слова, составленные из одних букв). Ключ — отсортированные буквы слова, значение — список анаграмм. + * + * @param words Слова + * @return Группы + */ + @Override + public Map> group(String... words) { + Map> anagrams = new HashMap<>(); + + for (String word : words) { + String key = CharBuffer.wrap(word.toCharArray()).chars().boxed() + .distinct() + .sorted() + .map(c -> String.valueOf((char) c.intValue())) + .collect(Collectors.joining()); + anagrams.computeIfAbsent(key, k -> new LinkedList<>()).add(word); + } + + return anagrams; + } + +} diff --git a/src/main/java/ru/ilug/c8_anagram_group/MainTest.java b/src/main/java/ru/ilug/c8_anagram_group/MainTest.java index 1f7429a..4649cd4 100644 --- a/src/main/java/ru/ilug/c8_anagram_group/MainTest.java +++ b/src/main/java/ru/ilug/c8_anagram_group/MainTest.java @@ -2,17 +2,21 @@ package ru.ilug.c8_anagram_group; import lombok.extern.slf4j.Slf4j; +import java.util.List; +import java.util.Map; + @Slf4j public class MainTest { public static void main(String[] args) { - AnagramGroup anagramGroup = null; + AnagramGroup anagramGroup = new AnagramGroupImpl(); String[] words = new String[]{ - "кабан", "соринка", "кукла", "мышка", "приказ", "шнурок", - "кулак", "банка", "коршун", "росинка", "каприз", "камыш" + "кабан", "соринка", "кукла", "мышка", "приказ", "шнурок", // кабан -> кабн -> абкн + "кулак", "банка", "коршун", "росинка", "каприз", "камыш" // банка -> банк -> абкн }; - log.info("Anagram groups: {}", words); + Map> result = anagramGroup.group(words); + log.info("Anagram groups: {}", result); } }