LeetCode-in-All

49. Group Anagrams

Medium

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.

Example 1:

Input: strs = [“eat”,”tea”,”tan”,”ate”,”nat”,”bat”]

Output: [[“bat”],[“nat”,”tan”],[“ate”,”eat”,”tea”]]

Example 2:

Input: strs = [””]

Output: [[””]]

Example 3:

Input: strs = [“a”]

Output: [[“a”]]

Constraints:

Solution

func groupAnagrams(strings []string) [][]string {
	stringsByPattern := make(map[[26]byte][]string)
	for i := 0; i < len(strings); i++ {
		var pattern [26]byte
		for c := 0; c < len(strings[i]); c++ {
			pattern[strings[i][c]-'a']++
		}
		stringsByPattern[pattern] = append(stringsByPattern[pattern], strings[i])
	}

	answer, index := make([][]string, len(stringsByPattern)), 0
	for _, slice := range stringsByPattern {
		answer[index] = slice
		index++
	}
	return answer
}