80 lines
1.5 KiB
Go
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
|
|
}
|