成为 K 特殊字符串需要删除的最少字符数

给你一个字符串 word 和一个整数 k。
如果 |freq(word[i]) - freq(word[j])| <= k 对于字符串中所有下标 i 和 j 都成立,则认为 word 是 k 特殊字符串。
此处,freq(x) 表示字符 x 在 word 中的
出现频率,而 |y| 表示 y 的绝对值。
返回使 word 成为 k 特殊字符串 需要删除的字符的最小数量。

  • 输入:word = “aabcaba”, k = 0
    输出:3
    解释:可以删除 2 个 “a” 和 1 个 “c” 使 word 成为 0 特殊字符串。word 变为 “baba”,此时 freq(‘a’) == freq(‘b’) == 2。

  • 输入:word = “dabdcbdcdcd”, k = 2
    输出:2
    解释:可以删除 1 个 “a” 和 1 个 “d” 使 word 成为 2 特殊字符串。word 变为 “bdcbdcdcd”,此时 freq(‘b’) == 2,freq(‘c’) == 3,freq(‘d’) == 4。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var minimumDeletions = function(word, k) {
let ans = +Infinity;
const arrNum = Array(26).fill(0);
for (const w of word) {
arrNum[w.charCodeAt() - 'a'.charCodeAt()]++;
}
const arrCount = arrNum.filter(n => n !== 0).sort((a, b) => a - b);
if (arrCount.length === 1) return 0;
for (const least of arrCount) {
const count = least + k;
ans = Math.min(ans, arrCount.reduce((acc, cur) => {
if (cur > count ) {
return acc + cur - count;
} else if (cur < least) {
return acc + cur;
} else {
return acc;
}
}, 0))
}
return ans;
};