[leetcode] 49.Group Anagrams

반응형

문제

Given an array of strings, group anagrams together.

Example:

Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]

 

Note:

  • All inputs will be in lowercase.
  • The order of your output does not matter.

풀이

Anagram 은 단어나 문장을 구성하고 있는 문자의 순서를 바꾸어 다른 단어나 문장을 만드는 놀이이다.

 

주어진 input에서 Anagram 인 것들만 모아주면 되는 문제이다. input이 모두 소문자이기 떄문에 대소문자를 구분할 필요가 없다.

 

map를 이용하여 정렬된 단어를 키값으로 사용하여 단어들을 그룹화하면 된다.  문제에서 결과의 순서를 고려하지 않기 때문에 map를 2차원 slice로 만들어 리턴해줬다.


코드

func groupAnagrams(strs []string) [][]string {
	m := make(map[string][]string)

	for _, word := range strs {
		key := sortString(word)
		m[key] = append(m[key], word)
	}

	result := make([][]string, 0)
	for _, v := range m {
		result = append(result, v)
	}

	return result
}

func sortString(w string) string {
	s := strings.Split(w, "")
	sort.Strings(s)
	return strings.Join(s, "")
}

 

 

참고