1647. 字符频次唯一的最小删除次数
如果字符串 s 中 不存在 两个不同字符 频次 相同的情况,就称 s 是 优质字符串 。
给你一个字符串 s,返回使 s 成为 优质字符串 需要删除的 最小 字符数。
字符串中字符的 频次 是该字符在字符串中的出现次数。例如,在字符串 "aab" 中,'a' 的频次是 2,而 'b' 的频次是 1 。
示例 1:
输入:s = "aab"
输出:0
解释:s 已经是优质字符串。
示例 2:
输入:s = "aaabbbcc"
输出:2
解释:可以删除两个 'b' , 得到优质字符串 "aaabcc" 。
另一种方式是删除一个 'b' 和一个 'c' ,得到优质字符串 "aaabbc" 。
示例 3:
输入:s = "ceabaacb"
输出:2
解释:可以删除两个 'c' 得到优质字符串 "eabaab" 。
注意,只需要关注结果字符串中仍然存在的字符。(即,频次为 0 的字符会忽略不计。)
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-deletions-to-make-character-frequencies-unique
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解 :
var minDeletions = function(s) {
//1.先统计所有单词出现的数量,并且按大到小排序
//按大到小把给数组去重
let arr = {}
for( i=0 ; i < s.length ; i++){
Object.keys(arr).indexOf(s[i] ) >= 0 ? arr[s[i]]+=1:arr[s[i]] =1
}
let numb = []
for (const k in arr) {
if (arr.hasOwnProperty(k)) {
numb.push(arr[k]);
}
};
numb.sort((a,b) => {
if(a>b){
return -1
}else{
return 1
}
})
console.log( numb);
console.log(Math.max(...numb) );
let count = 0
for (let i = 1; i < numb.length; i++) {
if(numb[i] == numb[i-1] && numb[i] > 0 ){
numb[i]--
count += 1
}else if(numb[i] >numb[i-1] &&numb[i-1] > 0 ){
count += (numb[i] - numb[i-1] +1)
numb[i] = numb[i-1]-1
}else if(numb[i] >numb[i-1] && numb[i-1] == 0 ){
count += numb[i]
numb[i] =0
}
}
return count
}
/* 注意事项
1. sort()函数对number排序的时候必须要传入函数 ,不然他就把数字当作字符串给你比较了。
2.要注意好相同数量的情况
3.计数时要先计数在赋值 ,不然到时候你可能得到的数会偏小

浙公网安备 33010602011771号