dengxinyi 6 years ago
parent
commit
4ca1faaece
1 changed files with 27 additions and 0 deletions
  1. 27 0
      medium/451.sort-characters-by-frequency.go

+ 27 - 0
medium/451.sort-characters-by-frequency.go

@@ -0,0 +1,27 @@
+type pairs [][]int
+
+func (ps pairs) Len() int           { return len(ps) }
+func (ps pairs) Less(i, j int) bool { return ps[j][0] < ps[i][0] }
+func (ps pairs) Swap(i, j int)      { ps[i], ps[j] = ps[j], ps[i] }
+
+func frequencySort(s string) string {
+	freq := make([]int, 256)
+	for _, r := range s {
+		freq[r]++
+	}
+	var ps pairs = make([][]int, 0)
+	for i := 0; i < 256; i++ {
+		ps = append(ps, []int{freq[i], i})
+	}
+	sort.Sort(ps)
+	n := len(s)
+	res := make([]rune, n)
+	for i, j := 0, 0; i < n; i++ {
+		for ps[j][0] == 0 {
+			j++
+		}
+		res[i] = rune(ps[j][1])
+		ps[j][0]--
+	}
+	return string(res)
+}