49.go 791 B

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