Add AnagramGroupImpl

This commit is contained in:
2026-01-23 13:02:11 +03:00
parent c1669b7814
commit 6e321081ca
2 changed files with 42 additions and 4 deletions

View File

@@ -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<String, List<String>> group(String... words) {
Map<String, List<String>> 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;
}
}

View File

@@ -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<String, List<String>> result = anagramGroup.group(words);
log.info("Anagram groups: {}", result);
}
}