豆包MarsCode AI刷题记录——学习方法与心得
问题描述
给定一个字符串 ss,该字符串中只包含英文大小写字母。你需要计算从字符串中最多能组成多少个字符串 "ku"。每次可以随机从字符串中选一个字符,并且选中的字符不能再使用。字符串中的字符大小写可以忽略,即大写和小写字母视为相同。
例如,输入 "AUBTMKAxfuu",从中最多能组成 1 个 "ku"。
题目解析
-
字符计数:
- 首先,我们需要统计字符串中每个字母的出现次数。由于大小写字母视为相同,统计时可以将字母统一转化为小写或大写。
- 然后,我们需要统计字符
'k'和'u'的出现次数。要能组成一个 "ku" 字符串,我们至少需要一个'k'和一个'u'。
-
最大 "ku" 数量:
- 为了组成最多的 "ku",我们需要找到
'k'和'u'的最小值,因为每个 "ku" 需要一个'k'和一个'u'。 - 例如,如果有 3 个
'k'和 5 个'u',那么最多可以组成 3 个 "ku" 字符串。
- 为了组成最多的 "ku",我们需要找到
-
算法步骤:
- 转换字符串为小写字母。
- 统计
'k'和'u'的出现次数。 - 返回
'k'和'u'中较小的那个值。
代码详解
from collections import Counter
def solution(s: str) -> int:
# 转换字符串为小写
s = s.lower()
# 统计字符频率
count = Counter(s)
# 获取 'k' 和 'u' 的出现次数
count_k = count['k']
count_u = count['u']
# 最多能组成的 "ku" 数量是 'k' 和 'u' 中较小的那个
return min(count_k, count_u)
if __name__ == '__main__':
# 测试样例
print(solution("AUBTMKAxfuu") == 1) # 1
print(solution("KKuuUuUuKKKKkkkkKK") == 6) # 6
print(solution("abcdefgh") == 0) # 0
复杂度分析
- 时间复杂度:O(n),其中 n 是字符串
s的长度。我们需要遍历字符串一次来统计字符的频率。 - 空间复杂度:O(1),我们只需要一个
Counter来统计字符频率,这个空间开销是常数的(最多 26 个字母的频率)。
这种方法非常高效,能够快速解决问题。
AI刷题体验
豆包 MarsCode AI 刷题,将代码编辑器和 AI 能力相结合,希望帮助同学们更快速地进行算法题目练习,大厂真题助力高效掌握算法知识,总的来说豆包为刷题者提供了非常高效和智能的学习体验。它不仅可以帮助初学者快速掌握编程和算法知识,还能为有一定基础的学生提供高效的训练和面试准备平台。不过,也需要注意 AI 不能替代深度的理解和思考,刷题仍然需要长期的积累和练习。在实际应用中,学生应结合 AI 的辅助功能和自己的思考,才能获得最佳的学习效果。 总的来说,豆包 MarsCode AI 刷题是一个非常有潜力的工具,能够为学习者提供更加个性化、智能化和高效的学习体验。