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
}