日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 1647. 字符频次唯一的最小删除次数(贪心)

發布時間:2024/7/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1647. 字符频次唯一的最小删除次数(贪心) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

如果字符串 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 的字符會忽略不計。)提示: 1 <= s.length <= 10^5 s 僅含小寫英文字母

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/minimum-deletions-to-make-character-frequencies-unique
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

  • 從大的頻數往下找,找到一個沒有在頻數集合里出現的頻數
class Solution { public:int minDeletions(string s) {unordered_map<int,int> m;for(char c : s)m[c]++;//字符計數vector<int> num;for(auto& mi : m)num.push_back(mi.second);//頻數sort(num.begin(), num.end());//頻數排序set<int> set;int del = 0;for(int i = num.size()-1; i>=0; --i){ // 從大的頻數開始遍歷if(!set.count(num[i]))set.insert(num[i]);//頻數不存在,直接插入setelse//頻數存在,往下找不存在的頻數{int k = num[i]-1;while(set.count(k))k--;//找到一個 頻數 k 是沒有出現過的if(k > 0)//如果頻數大于 0set.insert(k);del += min(num[i], num[i]-k);//要刪除的字符數}}return del;} };

256 ms 17.7 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的LeetCode 1647. 字符频次唯一的最小删除次数(贪心)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。