Swift题解

*描述 给出一个名字,该名字有26个字符组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。 每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个不同字母拥有相同的“漂亮度”。字母忽略大小写。

给出多个名字,计算每个名字最大可能的“漂亮度”。*

思路

关键信息: 每个字母的漂亮度不一样,1到26之间随机

问题可以转化为统计字符串中的字符的个数,让个数最多的字母漂亮度最大(26),个数第二多的漂亮度次大(26-1),依次类推。

因此有如下代码:

let n = Int(readLine() ?? "") ?? 0
var strs = [String]()
for _ in 0 ..< n {
    strs.append(readLine() ?? "")
}
for str in strs {
    let degree = maxDegreeOfStr(str)
    print(degree)
}

func maxDegreeOfStr(_ str: String) -> Int {
    var degree = 0
    var dict = [Character: Int]()
    for c in str {
        if let count = dict[c] {
            dict[c] = count + 1
        } else {
            dict[c] = 1
        }
    }
    let times = dict.map{ $0.value }.sorted { t1, t2 in
        return t1 > t2
    }
    
    var singleDegree = 26
    for t in times {
        degree += t * singleDegree
        singleDegree -= 1
    }
    return degree
}