Skip to content

Commit 84c632f

Browse files
group anagram solution
1 parent f8aa2fc commit 84c632f

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

group-anagrams/jaejeong1.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import java.util.ArrayList;
2+
import java.util.HashMap;
3+
import java.util.List;
4+
import java.util.Map;
5+
6+
class SolutionGroupAnagram {
7+
public List<List<String>> groupAnagrams(String[] strs) {
8+
// char, integer map으로 strs의 원소들을 분류한다
9+
// 분류 후 알파벳 순으로 정렬해 알파벳 + 개수 조합의 str으로 만든다
10+
// str 과 인덱스를 맵에 넣는다
11+
// 맵 keyset을 돌면서 value에 해당하는 strs 인덱스로 접근해 정답으로 반환
12+
// 시간복잡도: O(N), 공간복잡도: O(N)
13+
Map<String, List<Integer>> map = new HashMap<>();
14+
15+
for (int i=0; i<strs.length; i++) {
16+
var anagramData = createAnagramData(strs[i]);
17+
var value = map.getOrDefault(anagramData, new ArrayList<>());
18+
value.add(i);
19+
map.put(anagramData, value);
20+
}
21+
22+
List<List<String>> answer = new ArrayList<>();
23+
24+
for (String key : map.keySet()) {
25+
List<String> value = new ArrayList<>();
26+
for (int index : map.get(key)) {
27+
value.add(strs[index]);
28+
}
29+
30+
answer.add(value);
31+
}
32+
33+
return answer;
34+
}
35+
36+
private String createAnagramData(String str) {
37+
Map<Character, Integer> map = new HashMap<>();
38+
39+
for (int i=0; i<str.length(); i++) {
40+
var element = str.charAt(i);
41+
map.put(element, map.getOrDefault(element, 0)+1);
42+
}
43+
44+
var keySet = map.keySet().stream().sorted().toList();
45+
StringBuilder anagramData = new StringBuilder();
46+
for (char key : keySet) {
47+
anagramData.append(key).append(map.get(key));
48+
}
49+
50+
return anagramData.toString();
51+
}
52+
}

0 commit comments

Comments
 (0)