Description
A string s is called good if there are no two different characters in s that have the same frequency.
Given a string s, return the minimum number of characters you need to delete to make s good.
The frequency of a character in a string is the number of times it appears in the string. For example, in the string “aab”, the frequency of ‘a’ is 2, while the frequency of ‘b’ is 1.
Example 1:
Input: s = "aab"
Output: 0
Explanation: s is already good.
Example 2:
Input: s = "aaabbbcc"
Output: 2
Explanation: You can delete two 'b's resulting in the good string "aaabcc".
Another way it to delete one 'b' and one 'c' resulting in the good string "aaabbc".
Example 3:
Input: s = "ceabaacb"
Output: 2
Explanation: You can delete both 'c's resulting in the good string "eabaab".
Note that we only care about characters that are still in the string at the end (i.e. frequency of 0 is ignored).
Constraints:
- 1 <= s.length <= 105
- s contains only lowercase English letters.
分析
题目的意思是:给定一个字符串s,可以删除其中的字符,求能够使字符串字符频率保持唯一最小删除数目。
- 建立一个字典,统计字符的频率,然后按照频率倒序排序。
- 然后把相同的频率只保留一个,其他的一个一个删除(并不是完全删,是一个一个删),一个一个删除的时候要用set集合判断一下,不能删除后还有相同频率的字符。删除的时候维护更新res就是答案了哈,即最小删除数。
代码
class Solution:
def minDeletions(self, s: str) -> int:
d=defaultdict(int)
for ch in s:
d[ch]+=1
s=set()
res=0
d=sorted(d.values(), reverse=True)
# print(d)
for v in d:
while(v in s):
v-=1
res+=1
if(v>0):
s.add(v)
return res
参考文献
1647. Minimum Deletions to Make Character Frequencies Unique