组成字符串ku的最大次数 | 豆包MarsCode AI刷题
很简单,简单计数就好了没什么难度
摘要
本文介绍了如何从一个字符串中统计字母 "K/k" 和 "U/u" 的出现次数,以便计算能够组成字符串 "ku" 的最大数量。通过简单的遍历和计数操作,计算字母对的数量。本文提供了Python和Go的代码实现,时间复杂度为 。
问题描述
给定一个包含英文大小写字母的字符串 ,目标是计算字符串中最多能组成多少个字符串 "ku"。每次可以随机选择字母 "k" 和 "u"(不区分大小写),但每个字母只能使用一次。
示例
-
输入:
s = "AUBTMKAxfuu"
输出:1 -
输入:
s = "KKuuUuUuKKKKkkkkKK"
输出:6 -
输入:
s = "abcdefgh"
输出:0
原理分析
1. 字母计数
为了确定能组成多少个 "ku",我们需要统计字符串中 "k" 和 "u" 的数量。由于字母大小写不敏感,可以将 "K" 和 "k" 视为相同字符,同理 "U" 和 "u" 也视为相同字符。
2. 取最小值
组成一个 "ku" 字符串需要一个 "k" 和一个 "u",因此可以组成的 "ku" 数量取决于 "k" 和 "u" 中较小的计数。
代码实现
Python代码
def solution(s: str) -> int:
"""
该函数接收一个字符串 s,统计其中字符 'K'/'k' 和 'U'/'u' 的数量。
返回 'K'/'k' 和 'U'/'u' 中较小的那个数量,以便能组成相同数量的配对。
"""
cnt_map = {'k': 0, 'u': 0} # 初始化计数字典
# 遍历字符串统计 'K'/'k' 和 'U'/'u' 的数量
for char in s:
if char in ('K', 'k'):
cnt_map['k'] += 1
elif char in ('U', 'u'):
cnt_map['u'] += 1
# 返回 'k' 和 'u' 的最小计数
return min(cnt_map['k'], cnt_map['u'])
if __name__ == "__main__":
# 测试用例
print(solution("AUBTMKAxfuu") == 1) # 应输出 True
print(solution("KKuuUuUuKKKKkkkkKK") == 6) # 应输出 True
print(solution("abcdefgh") == 0) # 应输出 True
Go语言代码
package main
import (
"fmt"
)
func solution(s string) int {
cntMap := map[byte]int{}
for i := 0; i < len(s); i++ {
if s[i] == 'K' || s[i] == 'k' {
cntMap['k']++
} else if s[i] == 'U' || s[i] == 'u' {
cntMap['u']++
}
}
if cntMap['u'] > cntMap['k'] {
return cntMap['k']
} else {
return cntMap['u']
}
}
func main() {
fmt.Println(solution("AUBTMKAxfuu") == 1) // 应输出 true
fmt.Println(solution("KKuuUuUuKKKKkkkkKK") == 6) // 应输出 true
fmt.Println(solution("abcdefgh") == 0) // 应输出 true
}