package top100liked // https://leetcode.cn/problems/group-anagrams/?envType=study-plan-v2&envId=top-100-liked // 我居然能在算法题里写出这么离谱的代码 // type s2 struct { // Str string // CharMap map[rune]int // Used bool // } // func (s *s2) Equal(target *s2) bool { // return maps.Equal(s.CharMap, target.CharMap) // } // func newS2() *s2 { // return &s2{ // Str: "", // CharMap: make(map[rune]int), // Used: false, // } // } // func groupAnagrams(strs []string) [][]string { // l := make([]*s2, 0) // for _, str := range strs { // _s2 := newS2() // _s2.Str = str // for _, c := range str { // _s2.CharMap[c]++ // } // l = append(l, _s2) // } // res := [][]string{} // for i, s2_1 := range l { // if s2_1.Used { // continue // } // r := []string{} // r = append(r, s2_1.Str) // s2_1.Used = true // for j := i + 1; j < len(l); j++ { // s2_2 := l[j] // if !s2_2.Used && s2_1.Equal(s2_2) { // r = append(r, s2_2.Str) // s2_2.Used = true // } // } // res = append(res, r) // } // return res // } func stringTurntobytes(s string) [26]byte { bytes := [26]byte{} for _, v := range s { bytes[v-'a']++ } return bytes } func groupAnagrams(strs []string) [][]string { m := make(map[[26]byte]int) res := make([][]string, 0) index := 0 for _, str := range strs { bytes := stringTurntobytes(str) if _, ok := m[bytes]; ok { res[m[bytes]] = append(res[m[bytes]], str) } else { m[bytes] = index index++ res = append(res, []string{str}) } } return res }