问题描述
小U手中有两个数字 a 和 b。第一个数字是一个任意的正整数,而第二个数字是一个非负整数。她的任务是将第二个数字 b 插入到第一个数字 a 的某个位置,以形成一个最大的可能数字。
你需要帮助小U找到这个插入位置,输出插入后的最大结果。
测试样例
样例1:
输入:
a = 76543, b = 4
输出:765443
样例2:
输入:
a = 1, b = 0
输出:10
样例3:
输入:
a = 44, b = 5
输出:544
样例4:
输入:
a = 666, b = 6
输出:6666
问题分析
这个问题的核心是从给定字符串中最多能组成多少个 "ku" 字符串。我们可以通过以下步骤来解决:
解题思路
-
字符频率统计:
- 我们需要统计字符串中 'k' 和 'u' 的数量,忽略大小写。因为 "ku" 需要一个 'k' 和一个 'u',所以能组成多少个 "ku" 字符串的数量,取决于这两种字符的数量。
-
统计 'k' 和 'u' :
- 将字符串中的所有字符转换为小写,这样大小写就不再有区别。
- 然后统计字符串中 'k' 和 'u' 的个数。
-
计算 "ku" 字符串的数量:
- 因为每个 "ku" 字符串需要一个 'k' 和一个 'u',所以最多能组成的 "ku" 字符串数是
min(统计到的k的数量, 统计到的u的数量)。
- 因为每个 "ku" 字符串需要一个 'k' 和一个 'u',所以最多能组成的 "ku" 字符串数是
代码
def solution(s: str) -> int:
from collections import Counter
# 将字符串全部转换为小写
s = s.lower()
# 统计字符频率
freq = Counter(s)
# 计算'k'和'u'的数量
count_k = freq['k']
count_u = freq['u']
# 最多能组成的 "ku" 字符串的数量是 'k' 和 'u' 中较小的那个
return min(count_k, count_u)
代码讲解
-
字符串转小写:首先,我们将输入字符串
s转为小写,以便忽略大小写的区别。 -
统计字符频率:我们使用 Python 的
collections.Counter类来统计字符串中每个字符的出现次数。 -
计算可组成的 "ku" 数量:通过
min(count_k, count_u)计算出最多能组成多少个 "ku" 字符串。因为每个 "ku" 字符串需要一个 'k' 和一个 'u',所以结果取决于 'k' 和 'u' 中最少的数量。
复杂度分析
复杂度分析
- 时间复杂度:O(n),其中 n 是字符串的长度。我们只遍历了一遍字符串来统计字符的频率。
- 空间复杂度:O(1),因为我们只使用了常数空间来存储字符频率。
结论
这个解法简单且高效,能够正确处理大小写不敏感的字符统计,并计算出最大可组成的 "ku" 字符串数量。