代码1
排序加map
func groupAnagrams(strs []string) [][]string {
mp := map[string][]string{}
for _,str := range strs {
s := []byte(str)
sort.Slice(s,func(i,j int) bool {return s[i] < s[j]})
sorts := string(s)
mp[sorts] = append(mp[sorts],str)
}
ans := make([][]string,0,len(mp))
for _,j := range mp {
ans = append(ans,j)
}
return ans
}
代码2
记录字母个数+map
func groupAnagrams(strs []string) [][]string {
mp := map[[26]int][]string{}
for _,str := range strs {
cut := [26]int{}
for _,j := range str {
cut[j-'a']++
}
mp[cut] = append(mp[cut],str)
}
ans := make([][]string,0,len(mp))
for _,i := range mp {
ans = append(ans, i)
}
return ans
}
代码1和代码2思想都是找到异位词的共同点,也就是通过某些运算,我们可以将异位词变为相同的key,从而利用map数据结构来将形同key的异位词记录到一个string切片中,最后再通过for range来将map中的切片一个一个记录的string的二维数组ans中