给字符定重去重问题| 豆包MarsCode AI刷题

70 阅读4分钟

问题描述

给定一个字符串 𝑠s,你需要通过删除一些字符,使得每个字符在字符串中出现的次数均不相同。你需要找出最少需要删除的字符数量以达到这个目标。

例如,对于字符串 "aab",字符 "a" 出现2次,字符 "b" 出现1次,这些出现次数已经不同,因此不需要删除任何字符,输出为0。


测试样例

样例1:

输入:s = "aab"
输出:0

样例2:

输入:s = "aaabbbcc"
输出:2

样例3:

输入:s = "abcdef"
输出:5 ` def solution(s: str) -> int:

from collections import Counter


char_count = Counter(s)
count_set = set()
deletion_count = 0

for char, count in char_count.items():
    while count in count_set:
        count -= 1
        deletion_count += 1
    if count > 0:
        count_set.add(count)
return deletion_count



if name == 'main':

print(solution("aab") == 0)
print(solution("aaabbbcc") == 2)
print(solution("abcdef") == 5)`


1.  首先使用 `Counter` 类统计输入字符串 `s` 中每个字符出现的次数,得到一个字典 `char_count`,其中键是字符,值是该字符出现的次数。
  1. 然后遍历 char_count 中的每个字符及其出现次数。对于每个字符的出现次数,如果这个次数已经在 count_set 中(意味着已经有其他字符出现了相同的次数),就不断减少这个次数,并增加 deletion_count,直到这个次数不在 count_set 中。
  2. 如果最终这个字符的出现次数大于 0,就将其加入到 count_set 中。
  3. 最后返回 deletion_count,即达到每个字符出现次数均不同的目标所需要删除的最少字符数量

1. 算法目的

该算法旨在处理一个输入字符串,通过统计字符串中每个字符出现的次数,然后根据特定规则对出现次数进行调整,使得最终每个不同字符的出现次数都互不相同,算法最终返回为达到此目标所需要删除的字符数量。

2. 数据结构选择及作用

  • Counter:从 collections 模块引入的 Counter 类用于高效地统计输入字符串中每个字符的出现次数。它以字符为键,字符出现的次数为值,构建了一个类似字典的结构。这种数据结构能够快速获取每个字符的出现频次信息,为后续的处理提供了基础数据。
  • set:创建的空集合 count_set 用于存储已经出现过的字符出现次数。集合的特性是元素的唯一性,这使得它非常适合用于判断某个出现次数是否已经存在,从而确定是否需要对相应字符的出现次数进行调整(即删除字符以改变出现次数)。

3. 算法步骤及逻辑

统计字符出现次数

  • 首先,使用 Counter 对输入字符串 s 进行处理,得到 char_count,它准确地记录了每个字符在字符串中出现的次数。例如,对于字符串 "aaabbbcc",char_count 可能会记录 {'a': 3, 'b': 3, 'c': 2}

遍历并调整出现次数

  • 接着,通过遍历 char_count 中的每个键值对(即每个字符及其出现次数)来进行核心的调整操作:

    • 对于每个字符的出现次数 count,首先检查它是否已经在 count_set 中。如果在,说明存在其他字符也有相同的出现次数,这不符合每个字符出现次数互不相同的目标,所以需要进入一个内部的 while 循环进行调整。
    • 在 while 循环中,每次将 count 减 1,表示删除一个该字符,同时将 deletion_count 增加 1,以记录删除操作的次数。这个过程会持续进行,直到 count 不在 count_set 中为止,也就是使得该字符的出现次数变得独一无二。
    • 当 count 不在 count_set 中且 count 大于 0 时,就将这个经过调整后的 count 值添加到 count_set 中,以便后续判断其他字符的出现次数是否与之重复。

返回结果

  • 最后,经过对所有字符出现次数的遍历和必要的调整后,算法返回 deletion_count,这个值就是为了使每个字符的出现次数都互不相同而需要删除的字符数量。