|
@@ -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)
|
|
|
+}
|