main.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. // 114/117 未能全部通过
  2. package main
  3. import (
  4. "fmt"
  5. "strconv"
  6. )
  7. func main() {
  8. fmt.Println("hello")
  9. strs := []string{"bdddddddddd", "bbbbbbbbbbc"}
  10. // strs := []string{"acc", "acc"}
  11. fmt.Println(groupAnagrams(strs))
  12. }
  13. // 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
  14. // 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
  15. func groupAnagrams(strs []string) [][]string {
  16. mapDate := make(map[string][]string)
  17. originMap := make(map[string]int)
  18. result := [][]string{}
  19. key := ""
  20. for i := 0; i < 26; i++ {
  21. originMap[string(rune(97+i))] = 0
  22. }
  23. for i := 0; i < len(strs); i++ {
  24. key = ""
  25. strElement := strs[i]
  26. for j := 0; j < len(strElement); j++ {
  27. fmt.Print(string(strElement[j]))
  28. originMap[string(strElement[j])] = originMap[string(strElement[j])] + 1
  29. }
  30. fmt.Println()
  31. for i := 0; i < 26; i++ {
  32. key = key + strconv.Itoa(originMap[string(rune(97+i))])
  33. originMap[string(rune(97+i))] = 0
  34. }
  35. if rowList, isOK := mapDate[key]; isOK {
  36. rowList = append(rowList, strElement)
  37. mapDate[key] = rowList
  38. } else {
  39. rowList = append(rowList, strElement)
  40. mapDate[key] = rowList
  41. }
  42. }
  43. for _, v := range mapDate {
  44. result = append(result, v)
  45. }
  46. fmt.Println(mapDate)
  47. return result
  48. }
  49. /*
  50. func groupAnagrams(strs []string) [][]string {
  51. // var mapCompare func(map1 map[byte]int, map2 map[byte]int) bool
  52. mapCompare := func(map1 map[byte]int, map2 map[byte]int) bool {
  53. // fmt.Println(map1, map2)
  54. for k, v := range map1 {
  55. if map2[k] != v {
  56. return false
  57. }
  58. }
  59. for k, v := range map2 {
  60. if map1[k] != v {
  61. return false
  62. }
  63. }
  64. return true
  65. }
  66. result := [][]string{}
  67. mainMap := make(map[int]map[byte]int)
  68. // subMap := map[string]bool{"a": true}
  69. // mainMap[0] = map[byte]bool{0: false}
  70. count := 0
  71. for i := 0; i < len(strs); i++ {
  72. // fmt.Println("----------------------------------------", i)
  73. strElement := strs[i]
  74. subMap := make(map[byte]int)
  75. for j := 0; j < len(strElement); j++ {
  76. value, isOk := subMap[strElement[j]]
  77. if isOk {
  78. subMap[strElement[j]] = value + 1
  79. } else {
  80. subMap[strElement[j]] = 1
  81. }
  82. }
  83. flag := true
  84. for flag {
  85. for k, _ := range mainMap {
  86. if mapCompare(subMap, mainMap[k]) {
  87. row := result[k]
  88. row = append(row, strElement)
  89. result[k] = row
  90. flag = false
  91. break
  92. }
  93. }
  94. if flag {
  95. row := []string{}
  96. row = append(row, strElement)
  97. result = append(result, row)
  98. flag = false
  99. mainMap[count] = subMap
  100. count++
  101. flag = false
  102. }
  103. }
  104. // fmt.Println(subMap)
  105. // fmt.Println(mainMap)
  106. // fmt.Println(result)
  107. }
  108. // for i := 0; i < count; i++ {
  109. // listElement := []string{}
  110. // if
  111. // }
  112. return result
  113. }
  114. */