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 lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class MainTest {
|
public class MainTest {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
AnagramGroup anagramGroup = null;
|
AnagramGroup anagramGroup = new AnagramGroupImpl();
|
||||||
|
|
||||||
String[] words = new String[]{
|
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