题目描述
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
提示:
1 <= strs.length <= 1040 <= strs[i].length <= 100strs[i]仅包含小写字母
思路
"ate", "tae", "eat" 都被视为相同的分组,因此可以利用 hash 数组可以作为 key 的特性来唯一标识一个字符串序列,然后使用 map 将相同分组的字符串聚合到一起,最后在 append 到结果切片中。
代码
func groupAnagrams(strs []string) [][]string {
var results [][]string
var m map[[26]int][]string
m = make(map[[26]int][]string)
for _, str := range strs {
key := getKey(str)
m[key] = append(m[key], str)
}
for _, group := range m {
results = append(results, group)
}
return results
}
func getKey(str string) [26]int {
var hash [26]int
for i := 0; i < len(str); i++ {
hash[str[i]-'a']++
}
return hash
}