问题描述 小U得到一个只包含小写字母的字符串 S。她可以执行如下操作:每次选择字符串中两个相同的字符删除,然后在字符串末尾添加一个任意的小写字母。小U想知道,最少需要多少次操作才能使得字符串中的所有字母都不相同? 利用豆包MarsCode AI为我提供了解题思路:
问题理解 你需要计算最少需要多少次操作才能使得字符串中的所有字母都不相同。每次操作可以选择字符串中两个相同的字符删除,然后在字符串末尾添加一个任意的小写字母。 数据结构选择 我们可以使用 Counter 来统计字符串中每个字符的出现频率。 算法步骤 统计频率:使用 Counter 统计字符串中每个字符的出现频率。 计算操作次数: 对于每个字符,如果它的出现次数大于1,我们可以通过删除一对相同的字符来减少字符的数量。 每次删除一对相同的字符,操作次数加1。 返回结果:最终的操作次数就是使得所有字符都不相同所需的最少操作次数。 关键点 每次删除一对相同的字符,操作次数加1。 最终的操作次数是所有字符的出现次数大于1的部分的总和。
最终编写如下代码: `from collections import Counter
def solution(S: str) -> int: # 统计字符频率 freq = Counter(S) operations = 0
for char, count in freq.items():
if count > 1:
# 配对删除 count // 2 次
operations += count // 2
return operations
if name == 'main': print(solution(S = "abab") == 2) print(solution(S = "aaaa") == 2) print(solution(S = "abcabc") == 3)`
利用豆包MarsCode AI为我检查了代码: 检查结果 统计频率:代码中使用了 Counter 来统计字符频率,这部分是正确的。 计算操作次数: 代码中对于每个字符,如果它的出现次数大于1,计算 count // 2 并累加到 operations 中。 这部分逻辑也是正确的,因为每次删除一对相同的字符,操作次数加1。 返回结果:代码直接返回 operations,这也是正确的。 测试样例 solution(S = "abab") == 2:正确,因为可以删除两对 a 和 b。 solution(S = "aaaa") == 2:正确,因为可以删除两对 a。 solution(S = "abcabc") == 3:正确,因为可以删除两对 a、一对 b 和一对 c。