AI 刷题 30. 组成字符串ku的最大次数 | 豆包MarsCode AI刷题

72 阅读3分钟

豆包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" 字符串。
  • 算法步骤

    • 转换字符串为小写字母。
    • 统计 '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 刷题是一个非常有潜力的工具,能够为学习者提供更加个性化、智能化和高效的学习体验。