Leetcode 1647. Minimum Deletions to Make Character Frequencies Unique

文章作者:Tyan
博客:noahsnail.com ?|? CSDN ?|? 簡書

1. Description

Minimum Deletions to Make Character Frequencies Unique

2. Solution

解析:Version 1,先用字典統(tǒng)計(jì)每個(gè)英文字符出現(xiàn)的頻率,然后對頻率進(jìn)行由大到小排序,由大到小排列是因?yàn)轭l率最高的是可以出現(xiàn)的最大次數(shù),使用count表示刪除的字符數(shù)量,使用pre來表示為了不重復(fù),當(dāng)前字符刪除一部分后的出現(xiàn)次數(shù),初始值為pre = frequencies[0],比較當(dāng)前頻率與前一個(gè)字符頻率的大小,如果二者相等,為了不重復(fù),當(dāng)前頻率要減1,即刪除一個(gè)字符,因此count+=1,同時(shí)當(dāng)前字符的頻率減1,如果當(dāng)前字符頻率小于前一個(gè)字符的頻率,則不需要?jiǎng)h除字符,字符頻率pre進(jìn)行更新,如果當(dāng)前字符頻率大于前一個(gè)字符的頻率,為了不重復(fù),則當(dāng)前字符要?jiǎng)h除frequencies[i] - pre + 1個(gè)字符,同時(shí)更新pre,如果pre=1,即前一字符的頻率已經(jīng)為1,則后面的字符要全刪除,相等和大于的情況可以合并到一起。

  • Version 1
class Solution:
    def minDeletions(self, s: str) -> int:
        stat = collections.defaultdict(int)
        for ch in s:
            stat[ch] += 1
        frequencies = sorted(stat.values(), reverse=True)
        count = 0
        pre = frequencies[0]
        for i in range(1, len(frequencies)):
            if pre == 1:
                count += frequencies[i]
                continue
            if frequencies[i] >= pre:
                count += frequencies[i] - pre + 1
                pre -= 1
            else:
                pre = frequencies[i]
        return count

Reference

  1. https://leetcode.com/problems/minimum-deletions-to-make-character-frequencies-unique/
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容