添加 problem 451

This commit is contained in:
YDZ
2019-06-18 20:10:09 +08:00
parent bfc7e3ffc0
commit 52dcafcc35
3 changed files with 150 additions and 0 deletions

View File

@ -0,0 +1,35 @@
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)
}

View File

@ -0,0 +1,51 @@
package leetcode
import (
"fmt"
"testing"
)
type question451 struct {
para451
ans451
}
// para 是参数
// one 代表第一个参数
type para451 struct {
one string
}
// ans 是答案
// one 代表第一个答案
type ans451 struct {
one string
}
func Test_Problem451(t *testing.T) {
qs := []question451{
question451{
para451{"tree"},
ans451{"eert"},
},
question451{
para451{"cccaaa"},
ans451{"cccaaa"},
},
question451{
para451{"Aabb"},
ans451{"bbAa"},
},
}
fmt.Printf("------------------------Leetcode Problem 451------------------------\n")
for _, q := range qs {
_, p := q.ans451, q.para451
fmt.Printf("【input】:%v 【output】:%v\n", p, frequencySort(p.one))
}
fmt.Printf("\n\n\n")
}

View File

@ -0,0 +1,64 @@
# [451. Sort Characters By Frequency](https://leetcode.com/problems/sort-characters-by-frequency/)
## 题目
Given a string, sort it in decreasing order based on the frequency of characters.
Example 1:
```c
Input:
"tree"
Output:
"eert"
Explanation:
'e' appears twice while 'r' and 't' both appear once.
So 'e' must appear before both 'r' and 't'. Therefore "eetr" is also a valid answer.
```
Example 2:
```c
Input:
"cccaaa"
Output:
"cccaaa"
Explanation:
Both 'c' and 'a' appear three times, so "aaaccc" is also a valid answer.
Note that "cacaca" is incorrect, as the same characters must be together.
```
Example 3:
```c
Input:
"Aabb"
Output:
"bbAa"
Explanation:
"bbaA" is also a valid answer, but "Aabb" is incorrect.
Note that 'A' and 'a' are treated as two different characters.
```
## 题目大意
这道题是 Google 的面试题。
给定一个字符串,要求根据字符出现的频次从高到低重新排列这个字符串。
## 解题思路
思路比较简单,首先统计每个字符的频次,然后排序,最后按照频次从高到低进行输出即可。