题目描述
给定一个字符串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",我们需要:
- 统计字符串中'k'和'u'的数量(忽略大小写)
- 每个"ku"需要一个'k'和一个'u'
- 最终能组成的"ku"数量取决于'k'和'u'中数量较少的那个
2. 解决方案
我们可以通过以下步骤解决:
- 初始化两个计数器,分别统计'k'和'u'的数量
- 遍历字符串,统计字符数量
- 返回两个计数器中的较小值
3. 具体实现思路
- 创建两个计数器:
- cnt_k:统计'k'的数量
- cnt_u:统计'u'的数量
- 遍历字符串:
- 遇到'k'或'K'时,cnt_k加1
- 遇到'u'或'U'时,cnt_u加1
- 返回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)
代码详解
-
初始化计数器:
cnt_k = 0 cnt_u = 0创建两个计数器分别统计'k'和'u'的数量
-
遍历字符串:
for x in s: if x == 'k' or x == 'K': cnt_k += 1 if x == 'u' or x == 'U': cnt_u += 1- 使用for循环遍历字符串中的每个字符
- 使用or条件同时处理大小写字母
- 遇到相应字母时增加对应计数器
-
返回结果:
return min(cnt_k, cnt_u)返回两个计数器中的较小值,这就是能组成"ku"的最大数量