青训营X豆包MarsCode技术训练营伴学笔记(2)|组成字符串ku的最大次数|豆包MarsCode AI刷题

72 阅读4分钟

一、题目解析

1. 问题描述

给定一个字符串 𝑠s,该字符串中只包含英文大小写字母。你需要计算从字符串中最多能组成多少个字符串 "ku"。每次可以随机从字符串中选一个字符,并且选中的字符不能再使用。字符串中的字符大小写可以忽略,即大写和小写字母视为相同。

例如,输入 "AUBTMKAxfuu",从中最多能组成 1 个 "ku"

测试样例

样例1:

输入:s = "AUBTMKAxfuu"
输出:1

样例2:

输入:s = "KKuuUuUuKKKKkkkkKK"
输出:6

样例3:

输入:s = "abcdefgh"
输出:0

2. 题目解析

给定一个包含大小写英文字母的字符串,问从中最多可以组成多少个字符串 "ku"。每个字符只能使用一次,大小写忽略不计。

思路

  1. 大小写忽略:首先将字符串转化为小写以便后续统计。
  2. 统计字符频次:统计字符 'k''u' 的出现次数。
  3. 计算可组成的 "ku" 的数量:要组成一个 "ku" 字符串,必须有一个 'k' 和一个 'u',因此取字符 'k''u' 的数量中的较小值就是最大 "ku" 的数量。

图解: 假设字符串是 s = "AUBTMKAxfuu",以下是分步解析:

  • 第一步:将字符串转换为小写,得到 "aubtmakxfuu"
  • 第二步:统计 k 的出现次数为 1,u 的出现次数为 2。
  • 第三步:min(1, 2) = 1,因此输出结果为 1,最多能组成一个 "ku"。

3. 代码详解

def solution(s: str) -> int:
    # 将字符串转换为小写,忽略大小写
    s = s.lower()
    
    # 统计字符 'k' 和 'u' 的数量
    count_k = s.count('k')
    count_u = s.count('u')
    
    # 返回 'k' 和 'u' 的最小数量
    return min(count_k, count_u)

4. 时间和空间复杂度分析

  • 时间复杂度:O(n),其中 n 为字符串的长度。主要操作是对字符串的遍历以及统计字符出现次数。

  • 空间复杂度:O(1),仅使用了常数个变量来保存字符数量。

二、知识总结

  • 字符频次统计:这是一个很常用的操作,尤其是在字符串处理类题目中。
  • 忽略大小写的技巧:处理大小写不敏感的问题时,通常将字符串全部转换为小写或大写,简化操作。
  • 最小值的取法:类似于本题,很多题目都会用到 "组合数量" 的概念,即在限定的条件下,找出能组合成所需目标的最大数量。

个人理解和学习建议

  • 统计字符频次通常可以用哈希表或集合来加快速度,也可以用字符串的 count() 方法直接统计某些字符的数量。
  • 对于入门的同学,建议多练习字符串类的题目,理解和掌握大小写转换和频次统计等基础操作。这类题目可以帮助熟悉 Python 的基本字符串方法,如 count()lower() 等。

三、学习计划

  1. 每日刷题:坚持每日刷题,并关注解题的时间和空间复杂度,反复练习相似类型的题目。
  2. 错题集:将做错的题目记录下来,尤其是没理解透彻的题目,定期回顾和复习,分析错误原因,避免同类问题重复出错。
  3. 逐步提升:先从简单题目入手,掌握基础操作,再逐步增加题目难度,巩固自己的思维方式和解题技巧。

四、工具运用

如何将 AI 刷题功能与其他学习资源相结合

  • AI 辅助解析:使用 AI 辅助解题,当遇到疑难点或不理解的步骤时,可以通过 AI 获得快速解答,帮助梳理思路。可以结合 MarsCode AI 等刷题平台,选取有代表性的题目进行练习
  • 多种资源结合:在 AI 的基础上,结合算法书籍来深入理解常用算法思想。
  • 模拟面试场景:可以利用平台上的模拟面试功能(如果支持),让 AI 自动出题并评分,从而找到自身的薄弱点,形成针对性练习。