알고리즘 공부/leetcode
leetcode: Group Anagrams
소연쏘
2021. 2. 14. 18:31
그룹화 하기 위해 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;
}
}