AI 刷题 23. 最少字符串操作次数 题解 | 豆包MarsCode AI刷题

59 阅读1分钟

要解决这个问题,我们需要找到一种方法,使得字符串中的所有字母都不相同。每次操作可以删除两个相同的字符,并在字符串末尾添加一个任意的小写字母。我们需要计算最少的操作次数。

解题思路

1. 统计字符频率:

  • 首先,统计字符串中每个字符的出现次数。

2. 计算需要的操作次数:

  • 对于每个字符,如果它的出现次数大于1,则需要进行操作。

  • 每次操作可以减少两个相同的字符,因此对于一个字符出现次数为 count,需要进行 count // 2 次操作。

  • 统计所有字符的操作次数之和。

  • 实现步骤:

  • 使用一个字典来统计每个字符的频率。

  • 遍历字典,计算每个字符需要的操作次数,并累加得到总操作次数。

代码实现

def min_operations_to_unique(S):
    from collections import Counter
    
    # 统计每个字符的频率
    char_count = Counter(S)
    
    # 计算总的操作次数
    operations = 0
    for count in char_count.values():
        # 每两个相同字符需要一次操作
        operations += count // 2
    
    return operations

复杂度分析

  • 时间复杂度:𝑂(𝑛)O(n),其中 𝑛n 是字符串的长度。我们需要遍历字符串来统计字符频率。

  • 空间复杂度:𝑂(1)O(1),因为字母表的大小是固定的(26个小写字母),所以字典的大小是常数级别的。

通过这种方法,我们可以有效地计算出使字符串中所有字母都不相同所需的最少操作次数。