有一种有趣的字符串价值计算方式:统计字符串中每种字符出现的次数,然后求所有字符次数的平方和作为字符串的价值。
例如: 字符串"abacaba",里面包括4个'a',2个'b',1个'c',于是这个字符串的价值为4 * 4 + 2 * 2 + 1 * 1 = 21。
牛牛有一个字符串s,并且允许你从s中移除最多k个字符,你的目标是让得到的字符串的价值最小。
输入描述
输入包括两行,第一行一个字符串s,字符串s的长度length(1 ≤ length ≤ 50),其中只包含小写字母('a'-'z')。第二行包含一个整数k(0 ≤ k ≤ length),即允许移除的字符个数。
输出描述
输出一个整数,表示得到的最小价值。
输入
aba
1
输出
2
思路
- 依次遍历字符串(
aabbba)中的每一个数值,obj({ a: 3, b: 3 })对象的键字符,值是字符出现的次数。 - 创建一个数组
arr, 保存的是字符串中所有的字符出现的次数[3, 3]。 - 对数字进行升序排序,对 k(
2) 进行k--操作,每一个将数组中最大的值(arr[arr.length - 1])减值操作,数组重新排序,每一次都对数组中最大的数减值,直至k = 0即可。
function output(str, k) {
let obj = {}, arr = [], result = 0
for (let i = 0; i < str.length; i++) {
if (obj[str[i]]) {
obj[str[i]]++
} else {
obj[str[i]] = 1
}
}
for (key in obj) {
arr.push(obj[key])
}
arr.sort(function (a, b) {
return a - b
})
for (let i = 0; i < k; i++) {
arr[arr.length - 1]--
arr.sort(function (a, b) {
return a - b
})
}
arr.forEach(function (val) {
result += val * val
})
return result
}
console.log(output('aaabbb', 2))












网友评论