字母异位分组

53 阅读1分钟

image.png

代码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中