Leetcode 1647 - Minimum Deletions to Make Character Frequencies Unique

題目

Problem#

令字母出現次數不重複的字串叫做好字串,問你今天給你一個字串,能夠最小刪除多少,使得字串變成好字串?

測資限制#

  • $1 \le n \le 10^5$

想法#

統計每個字母(c)出現的次數 m[c],從大排到小,如果 $i$ 出現過了,則減一,檢查 $i-1$ 是否出現過,以此類推,在過程中統計減去的數值。

  • 時間複雜度: $\mathcal{O}(n\log{n}+k^2)$
    • $k$ = 最大的重複次數
    • 最差的狀況:全部都一樣,第一個不用減,第二個要減一,第三個要減二,⋯⋯ 以此類推。總和:$\frac{(0+k-1)k}{2} = \frac{k^2-k}{2}$ -> $O(n)$
  • 空間複雜度: $\mathcal{O}(n)$

AC Code#

心得#

寫完才發現自己以前寫過一次