Files
leetcode/top-100-liked/2_test.go
T
2026-05-31 01:09:31 +10:00

80 lines
1.5 KiB
Go

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
}