题解 | #名字的漂亮度#
名字的漂亮度
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) }