그룹화 하기 위해 sorted된 string을 key로 해서 map에 넣도록 했다.
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> answer = new ArrayList<>();
HashMap<String, ArrayList<String>> map = new HashMap<>();
for (String str : strs) {
String key = Stream.of(str.split("")).sorted().collect(Collectors.joining());
if (!map.containsKey(key)) {
map.put(key, new ArrayList<String>());
}
map.get(key).add(str);
}
for (String key : map.keySet()) {
answer.add(map.get(key));
}
return answer;
}
}
single string을 정렬하는 방법으로는 스트림으로 정렬하는 방법도 있고,
char로 바꾼 다음에 Arrays.sort를 쓴 후 다시 스트링으로 합치는 방법이 있는데 테스트 해 보니 후자가 더 빠르다는 것을 알게 되었다.
import java.util.*;
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> answer = new ArrayList<>();
HashMap<String, ArrayList<String>> map = new HashMap<>();
for (String str : strs) {
char[] keys = str.toCharArray();
Arrays.sort(keys);
String key = new String(keys);
if (!map.containsKey(key))
map.put(key, new ArrayList<>());
map.get(key).add(str);
}
for (String key : map.keySet()) {
answer.add(map.get(key));
}
return answer;
}
}
'알고리즘 공부 > leetcode' 카테고리의 다른 글
leetcode: Decode String (0) | 2021.02.14 |
---|---|
leetcode: Task Scheduler (0) | 2021.02.07 |
leetcode: Sliding Window Maximum (0) | 2021.02.07 |
leetcode: Longest Increasing Subsequence (0) | 2021.02.07 |
leetcode: Jump Game II (0) | 2021.01.31 |