组成字符串"ku"的最大次数问题-题解

109 阅读2分钟

题目描述

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

示例

示例 1:

输入: s = "AUBTMKAxfuu"
输出: 1
解释: 可以从字符串中选择一个'k'(或'K')和一个'u'(或'U')组成一个"ku"

示例 2:

输入: s = "KKuuUuUuKKKKkkkkKK"
输出: 6
解释: 可以组成6"ku",因为字符串中有12'k'8'u',受限于'u'的数量,最多只能组成6"ku"

示例 3:

输入: s = "abcdefgh"
输出: 0
解释: 字符串中没有'k''u',所以无法组成"ku"

解题思路

1. 问题分析

要组成字符串"ku",我们需要:

  1. 统计字符串中'k'和'u'的数量(忽略大小写)
  2. 每个"ku"需要一个'k'和一个'u'
  3. 最终能组成的"ku"数量取决于'k'和'u'中数量较少的那个

2. 解决方案

我们可以通过以下步骤解决:

  1. 初始化两个计数器,分别统计'k'和'u'的数量
  2. 遍历字符串,统计字符数量
  3. 返回两个计数器中的较小值

3. 具体实现思路

  1. 创建两个计数器:
    • cnt_k:统计'k'的数量
    • cnt_u:统计'u'的数量
  2. 遍历字符串:
    • 遇到'k'或'K'时,cnt_k加1
    • 遇到'u'或'U'时,cnt_u加1
  3. 返回cnt_k和cnt_u中的较小值

4. 复杂度分析

  • 时间复杂度:O(n)
    • 需要遍历整个字符串一次
    • n为字符串长度
  • 空间复杂度:O(1)
    • 只使用了两个计数器
    • 空间消耗与输入规模无关

代码实现

def solution(s):
    # 初始化计数器
    cnt_k = 0
    cnt_u = 0
    
    # 遍历字符串
    for x in s:
        if x == 'k' or x == 'K':
            cnt_k += 1
        if x == 'u' or x == 'U':
            cnt_u += 1
            
    # 返回两个计数器中的最小值
    return min(cnt_k, cnt_u)

代码详解

  1. 初始化计数器:

    cnt_k = 0
    cnt_u = 0
    

    创建两个计数器分别统计'k'和'u'的数量

  2. 遍历字符串:

    for x in s:
        if x == 'k' or x == 'K':
            cnt_k += 1
        if x == 'u' or x == 'U':
            cnt_u += 1
    
    • 使用for循环遍历字符串中的每个字符
    • 使用or条件同时处理大小写字母
    • 遇到相应字母时增加对应计数器
  3. 返回结果:

    return min(cnt_k, cnt_u)
    

    返回两个计数器中的较小值,这就是能组成"ku"的最大数量