49.go 788 B

123456789101112131415161718192021222324252627282930313233343536
  1. package main
  2. import (
  3. "fmt"
  4. "sort"
  5. )
  6. // RuneSlice implements sort.Interface
  7. type RuneSlice []rune
  8. func (p RuneSlice) Len() int { return len(p) }
  9. func (p RuneSlice) Less(i, j int) bool { return p[i] < p[j] }
  10. func (p RuneSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
  11. func groupAnagrams(strs []string) (res [][]string) {
  12. // sorted str : index
  13. m := map[string]int{}
  14. for _, v := range strs {
  15. runes := []rune(v)
  16. sort.Sort([]int(runes))
  17. if idx, ok := m[string(runes)]; !ok {
  18. m[string(runes)] = len(m)
  19. res = append(res, []string{v})
  20. } else {
  21. res[idx] = append(res[idx], v)
  22. }
  23. }
  24. return res
  25. }
  26. func main() {
  27. a1 := []string{"eat", "tea", "tan", "ate", "nat", "bat"}
  28. fmt.Println(groupAnagrams(a1))
  29. a2 := []string{}
  30. fmt.Println(groupAnagrams(a2))
  31. }