mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-23 18:10:20 +08:00
36 lines
585 B
Go
36 lines
585 B
Go
package leetcode
|
|
|
|
import (
|
|
"sort"
|
|
)
|
|
|
|
func frequencySort(s string) string {
|
|
if s == "" {
|
|
return ""
|
|
}
|
|
sMap := map[byte]int{}
|
|
cMap := map[int][]byte{}
|
|
sb := []byte(s)
|
|
for _, b := range sb {
|
|
sMap[b]++
|
|
}
|
|
for key, value := range sMap {
|
|
cMap[value] = append(cMap[value], key)
|
|
}
|
|
|
|
var keys []int
|
|
for k := range cMap {
|
|
keys = append(keys, k)
|
|
}
|
|
sort.Sort(sort.Reverse(sort.IntSlice(keys)))
|
|
res := make([]byte, 0)
|
|
for _, k := range keys {
|
|
for i := 0; i < len(cMap[k]); i++ {
|
|
for j := 0; j < k; j++ {
|
|
res = append(res, cMap[k][i])
|
|
}
|
|
}
|
|
}
|
|
return string(res)
|
|
}
|