[JAVA/LeetCode] Top 100 Liked Question: 49. Group Anagrams

👀 문제

https://leetcode.com/problems/group-anagrams/submissions/

👊 도전

1. 설계

  1. str를 오름차순으로 만들고, 해시맵에 넣어 같은 문자열이면 value에 넣는다.

2. 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
 *
 * @author HEESOO
 *
 */
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        if(strs.length==0) return new ArrayList();
        
        HashMap<String, List> map=new HashMap<>();
        for(String str:strs){
            char[] array=str.toCharArray(); // 배열로 만들어서 오름차순 정렬하기 위함
            Arrays.sort(array);
            String key=String.valueOf(array); // 배열을 String으로 변환
            if(!map.containsKey(key)) map.put(key, new ArrayList()); // 새로운 key면 리스트 생성
            map.get(key).add(str); // 해당 리스트에 str 추가
        }
        
        return new ArrayList(map.values());
    }
}

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. str를 오름차순 정렬한다
    • str를 오름차순 정렬하기 위해서는 Arrays.sort()를 쓰기 위해 배열로 만들어야 한다.
    • String[]형으로 만들 경우, 다시 String으로 변환하기 위해 for문을 써야하므로, char[]로 배열을 만들고 String.valueOf()로 String으로 다시 변환한다.
  2. 해시맵의 해당 key에 삽입한다
    • 오름차순으로 만든 key가 map에 없다면, 새 리스트를 하나 만든다.
    • map.get(key)로 value인 ArrayList를 가져오고, 거기에 add로 str를 넣는다.

👏 해결 완료!