给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i] 仅包含小写字母
解答
//两种方法 题解
//1 排序-hash
//2 计数-hash
/*
第一种 排序
注意: 字符串排序转化为数组、切片,方便排序
sort.Slice的用法 sort.Slice(v,func(a,b int){return v[a]>v[b]}) 倒序
*/
//排序
func groupAnagrams(strs []string) [][]string {
check := make(map[string][]string)
res := make([][]string,0)
for _,v :=range strs{
tmp := []byte(v)
sort.Slice(tmp,func(a,b int)bool{
return tmp[a] >tmp[b]
})
strTmp:= string(tmp)
check[strTmp]=append (check[strTmp],v)
}
for _,v := range check{
res =append(res, v)
}
return res
}
//计数
func groupAnagrams(strs []string) [][]string {
check := make(map[[26]int][]string)
res := make([][]string,0)
for _,v :=range strs{
tmp := [26]int{}
for _,j :=range v{
tmp[j-'a']++
}
check[tmp]=append (check[tmp],v)
}
for _,v := range check{
res =append(res, v)
}
return res
}
扩展---多维度排序
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。