123456789101112131415161718192021222324252627 |
- 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)
- }
|