题解 | #名字的漂亮度#
名字的漂亮度
https://www.nowcoder.com/practice/02cb8d3597cf416d9f6ae1b9ddc4fde3
package main
import (
"fmt"
"sort"
)
func main() {
var n int
fmt.Scan(&n)
strs := make([]string, n)
for i := range strs {
fmt.Scan(&strs[i])
}
// 处理
for _, str := range strs {
process(str)
}
}
// 贪心,字母数量最多,漂亮度最大
func process(str string) {
datas := make([]struct {
letter byte
count int
}, 0)
// letter -> 在datas内存储到索引
hash := make(map[byte]int)
for i := range str {
if idx, exist := hash[str[i]]; exist {
datas[idx].count++
continue
}
hash[str[i]] = len(datas)
datas = append(datas, struct {
letter byte
count int
}{
letter: str[i],
count: 1,
})
}
// 对datas 按count降序排序,而后计算漂亮度
sort.Slice(datas, func(i, j int) bool {
return datas[i].count > datas[j].count
})
ret := 0
// 从26降序
flag := 26
for i := 0; i < len(datas); i++ {
ret += datas[i].count * flag
flag--
}
fmt.Println(ret)
}
联想公司福利 1481人发布

查看9道真题和解析