[ Top Interview 150 ] 49. Group Anagrams

귀찮Lee·2023년 9월 1일
0

 Given an array of strings strs, group the anagrams together. You can return the answer in any order.

 An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.

  • Input : 문자열 배열 strs
  • Output : Anagram 단위의 문자열 묶음 (List<List<String>>)
    • Anagram : 같은 문자, 같은 개수로 이루어진 두 문자 (ex. dog, god)

알고리즘 전략

  • 정렬한 문자열로 구분하기

    • 두 문자가 Anagram이면, 정렬했을 때 같은 문자열을 가진다. 두 문자가 Anagram이 아니면, 정렬했을 때 다른 문자열을 가진다.
    • 그래서 이를 통해 서로 Anagram인지 구분할 수 있다.
  • Map 자료구조 사용

    • 정렬된 문자열을 key로 하고, 해당하는 문자열들의 묶음을 value로 하는 Map을 사용
    • HashMap에서 원소를 찾는데 Time complexity O(1)O(1)이므로 많은 자료를 key값으로 찾을 수 있을 때 효과적이다.

답안

  • Time complexity : O(n)O(n)
  • Space complexity: O(n)O(n)
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> letterToElements = new HashMap<>();

        for (String str : strs) {
            String sortedLetter = sort(str);
            List<String> elements = letterToElements.getOrDefault(sortedLetter, new ArrayList<>());
            elements.add(str);
            letterToElements.put(sortedLetter, elements);
        }

        return new ArrayList<>(letterToElements.values());
    }

    private String sort(String str) {
        char[] sortedArray = str.toCharArray();
        Arrays.sort(sortedArray);

        return String.valueOf(sortedArray);
    }
}

profile
배운 것은 기록하자! / 오류 지적은 언제나 환영!

0개의 댓글