Add AnagramGroupImpl
This commit is contained in:
34
src/main/java/ru/ilug/c8_anagram_group/AnagramGroupImpl.java
Normal file
34
src/main/java/ru/ilug/c8_anagram_group/AnagramGroupImpl.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user