leetcode 451. 根据字符出现频率排序

题解

创建字符串数组arr,字符位置表indexMap,遍历字符串s,如果字符已经存在arr中就加在后面,不存在则新增,然后根据arr中元素的字符串长度排序,最后返回连接后的字符串

示例代码(go)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func frequencySort(s string) string {
arr := make([]string, 0)
indexMap := make(map[rune]int)
for _, v := range s {
if _, ok := indexMap[v]; ok {
arr[indexMap[v]] += string(v)
} else {
arr = append(arr, string(v))
indexMap[v] = len(arr) - 1
}
}
sort.Slice(arr, func(i, j int) bool {
return len(arr[i]) > len(arr[j])
})
return strings.Join(arr, "")
}