青训营X豆包MarsCode 技术训练营:AI刷题 问题30:组成字符串ku的最大次数| 豆包MarsCode AI 刷题

38 阅读2分钟

问题描述

小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" 字符串。我们可以通过以下步骤来解决:

解题思路

  1. 字符频率统计

    • 我们需要统计字符串中 'k' 和 'u' 的数量,忽略大小写。因为 "ku" 需要一个 'k' 和一个 'u',所以能组成多少个 "ku" 字符串的数量,取决于这两种字符的数量。
  2. 统计 'k' 和 'u'

    • 将字符串中的所有字符转换为小写,这样大小写就不再有区别。
    • 然后统计字符串中 'k' 和 'u' 的个数。
  3. 计算 "ku" 字符串的数量

    • 因为每个 "ku" 字符串需要一个 'k' 和一个 'u',所以最多能组成的 "ku" 字符串数是 min(统计到的k的数量, 统计到的u的数量)

代码

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" 字符串数量。