diff options
author | terminaldweller <thabogre@gmail.com> | 2022-12-03 14:34:24 +0000 |
---|---|---|
committer | terminaldweller <thabogre@gmail.com> | 2022-12-03 14:34:24 +0000 |
commit | ce79562ebcdd5cac9a520dc411f6192184342f43 (patch) | |
tree | 508b9b207f342a2c83ce3318de7170cf5e88262a /451/main.go | |
parent | 1657 (diff) | |
download | leetcode-ce79562ebcdd5cac9a520dc411f6192184342f43.tar.gz leetcode-ce79562ebcdd5cac9a520dc411f6192184342f43.zip |
451
Diffstat (limited to '451/main.go')
-rw-r--r-- | 451/main.go | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/451/main.go b/451/main.go new file mode 100644 index 0000000..f025ce7 --- /dev/null +++ b/451/main.go @@ -0,0 +1,54 @@ +package main + +import ( + "fmt" + "sort" +) + +func frequencySort(s string) string { + dict := func(s string) map[int]int { + dict := make(map[int]int) + + for i := 0; i < len(s); i++ { + if _, ok := dict[int(s[i])]; ok { + dict[int(s[i])]++ + } else { + dict[int(s[i])] = 1 + } + } + + return dict + }(s) + + type kv struct { + key int + val int + } + + var ss []kv + + for k, v := range dict { + ss = append(ss, kv{k, v}) + } + + sort.Slice(ss, func(i, j int) bool { + return ss[i].val > ss[j].val + }) + + bytes := make([]byte, len(s), len(s)) + counter := 0 + for _, kv := range ss { + for i := 0; i < kv.val; i++ { + bytes[counter] = byte(kv.key) + counter++ + } + } + + return string(bytes) +} + +func main() { + fmt.Println(frequencySort("tree")) + fmt.Println(frequencySort("cccaaa")) + fmt.Println(frequencySort("Aabb")) +} |