Lever's Castle

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

November 18, 2018

https://leetcode-cn.com/problems/sort-characters-by-frequency/

使用语言:Golang

import (
  "strings"
)
func frequencySort(s string) string {
    charMap := make(map[rune]int)
    arr := make([]string, len(s))
    
    for _,c := range s {
        charMap[c]++
    }
    
    for k,v := range charMap {
        arr[v - 1] += strings.Repeat(string(k), v)
    }
    
    r := ""
    for _,c := range arr {
        r = c + r
    }

    return r
}

学习总结:

golang map 结构使用

声明一个 map 结构

map[KeyType]ValueType

KeyType 可以是任意可比较的类型,ValueType 则支持全部类型

那么哪些是可比较类型,哪些不是呢? 可比较类型:boolean, numeric, string, pointer, channel, interface, structs, array 不可比较类型:slices, maps, functions (他们无法用 == 判定相等)

map 是指针类型。

未经初始化的 map 结构值为 nil,在直接对其进行写入时会 panic,所以一定要进行初始化:

m := make(map[string]int) // 初始化 map 数据结构,并返回其指针

当你用 map 访问一个不存在的 key 时,go 会自动返回对应类型的零值,比如

i := m["hello"]

i 的值为 0,因为对应到 m 的声明上,map[string]int ,返回的应该是个 int 类型,而 int 类型的零值是 0

如何查看 map 中有多少 key?

len(m)

如何在 map 中删除一个 key?

delete(m, key)

map 不是并发安全的,在并发场景下使用 map 一定要记得加锁

map 不保证遍历时的顺序

参考链接:https://blog.golang.org/go-maps-in-action


Lever

痕迹
没有过去,就没法认定现在的自己