青训营X豆包MarsCode 技术训练营第七课:组成字符串ku的最大次数| 豆包MarsCode AI 刷题

74 阅读2分钟

解析步骤:

  1. 字符计数: 我们需要计算字符串中字符 'k''u' 的出现次数。由于题目要求大小写不区分,我们可以先将字符串转换为小写字母,然后统计 'k''u' 的出现次数。
  2. 字符串 "ku" 的组成: 由于字符串 "ku" 由一个字符 'k' 和一个字符 'u' 组成,因此我们需要从字符串中选择一个 'k' 和一个 'u'。每选出一个 'k' 和一个 'u' 就可以组成一个 "ku"。
  3. 最大数量的 "ku" : 组成字符串 "ku" 的数量,显然是由字符串中 'k''u' 的最小数量决定的。因为每次构成一个 "ku" 需要一个 'k' 和一个 'u',所以如果 'k''u' 多,那么最多只能组成 'u' 数量个 "ku";反之亦然。

算法步骤:

  1. 输入处理:将输入字符串转换为小写字母。
  2. 统计字符:统计 'k' 和 'u' 的出现次数。
  3. 计算结果:计算这两个字符的最小值,即为可以组成的 "ku" 的个数。

代码实现:

pythonCopy Code
def max_ku_count(s: str) -> int:
    # 将字符串转换为小写
    s = s.lower()
    
    # 统计 'k''u' 的出现次数
    count_k = s.count('k')
    count_u = s.count('u')
    
    # 最多能组成多少个 "ku" 取决于 'k''u' 中的最小值
    return min(count_k, count_u)

# 测试用例
print(max_ku_count("AUBTMKAxfuu"))  # 输出 1

代码解释:

  1. s.lower()

    • 将字符串 s 转换为小写字母,这样大小写字母就可以统一处理,不需要分开统计大写和小写的字符。
  2. s.count('k')s.count('u')

    • count('k') 和 count('u') 分别统计字符 'k' 和 'u' 在字符串中出现的次数。
  3. min(count_k, count_u)

    • 最多能够组成多少个 "ku" 就是取 'k' 和 'u' 中出现次数的最小值,因为每次构成一个 "ku" 需要一个 'k' 和一个 'u'

复杂度分析:

  • 时间复杂度

    • 将字符串转换为小写需要 O(n) 的时间,其中 n 是字符串的长度。
    • 统计字符 'k' 和 'u' 的出现次数也需要遍历一遍字符串,因此时间复杂度是 O(n)
    • 总体时间复杂度是 O(n)
  • 空间复杂度

    • 我们只使用了常数空间来存储字符计数,因此空间复杂度是 O(1)

示例:

示例 1:

输入:

plaintextCopy Code
AUBTMKAxfuu

步骤:

  • 将字符串转为小写:"aubtmkaxfuu"
  • 'k' 出现 1 次,'u' 出现 2 次
  • 最多可以组成 min(1, 2) = 1 个 "ku"

输出:

plaintextCopy Code
1

示例 2:

输入:

plaintextCopy Code
KKUUUU

步骤:

  • 将字符串转为小写:"kkuu"
  • 'k' 出现 2 次,'u' 出现 2 次
  • 最多可以组成 min(2, 2) = 2 个 "ku"

输出:

plaintextCopy Code
2

结论:

该算法通过统计 'k''u' 的出现次数,并返回其最小值来解决问题,时间复杂度是线性的,非常高效。