feat: group anagrams

This commit is contained in:
2025-12-15 21:35:21 -05:00
parent 2a6e1677d6
commit da48abc0d1
2 changed files with 55 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
package group_anagrams
import (
"hash/maphash"
"slices"
)
func SortString(s string) string {
runes := []rune(s)
slices.Sort(runes)
return string(runes)
}
func AnagramHash(letters string) uint64 {
var h maphash.Hash
h.WriteString(SortString(letters))
return h.Sum64()
}
func GroupAnagrams(items []string) [][]string {
anagrams := map[uint64][]string{}
for _, item := range items {
hash := AnagramHash(item)
similar, exists := anagrams[hash]
if exists {
anagrams[hash] = append(similar, item)
} else {
anagrams[hash] = []string{item}
}
}
result := [][]string{}
for _, group := range anagrams {
result = append(result, group)
}
return result
}

View File

@@ -0,0 +1,14 @@
package group_anagrams_test
// import (
// "testing"
// . "git.maximhutz.com/practice/pkg/group_anagrams"
// "github.com/stretchr/testify/assert"
// )
// func Test1(t *testing.T) {
// assert.Equal(t,
// [][]string{{"bat"}, {"nat", "tan"}, {"ate", "eat", "tea"}},
// GroupAnagrams([]string{"eat", "tea", "tan", "ate", "nat", "bat"}))
// }