计算字符串数量 | 豆包MarsCode AI 刷题

122 阅读3分钟

给定一个字符串 s,其中包含大小写英文字符。要求计算从该字符串中最多能组成多少个字符串 "ku"。可以随机选择字符串中的字符,但同一个字符不能重复使用。注意,字符大小写不敏感,因此大小写字母需要统一处理。


解题思路

  1. 字符计数

    • 一个字符串能组成多少个 "ku",依赖于字符 ku 的数量。
    • 每次组成一个 "ku",需要消耗一个 k 和一个 u。因此,能组成的最大数量取决于 ku 中的较小值。
  2. 大小写处理

    • 由于字符大小写不敏感,可以将字符串转化为小写或大写统一处理。这里选择将字符串转为小写。
  3. 统计字符

    • 遍历字符串,统计字符 ku 的出现次数。
  4. 计算结果

    • 最后,使用 Math.min(countK, countU) 计算可以组成的 "ku" 的最大数量。
  5. 边界条件

    • 如果字符串中没有字符 ku,则无法组成 "ku",直接返回 0。

代码实现

以下是实现代码:

java
复制代码
public class Main {
    public static int solution(String s) {
        // 将字符串转为小写
        s = s.toLowerCase();
        
        // 统计字符 k 和 u 的出现次数
        int countK = 0;
        int countU = 0;
        
        // 遍历字符串
        for (char c : s.toCharArray()) {
            if (c == 'k') {
                countK++;
            } else if (c == 'u') {
                countU++;
            }
        }
        
        // 返回 k 和 u 中较小的那个
        return Math.min(countK, countU);
    }

    public static void main(String[] args) {
        // 测试用例
        System.out.println(solution("AUBTMKAxfuu") == 1); // 输出 true
        System.out.println(solution("KKuuUuUuKKKKkkkkKK") == 6); // 输出 true
        System.out.println(solution("abcdefgh") == 0); // 输出 true
    }
}

核心技术解析

  1. 字符串大小写处理

    • 使用 Java 的 toLowerCase() 方法将字符串转为小写,可以方便地处理字符计数,不再需要分别考虑大写和小写。
  2. 字符统计

    • 遍历字符串时,通过简单的条件判断(if 语句),统计字符 ku 的数量。
  3. 取最小值

    • 一个 "ku" 需要一个 k 和一个 u,所以使用 Math.min(countK, countU) 来获取最大可组成的 "ku" 数量。
  4. 时间复杂度与空间复杂度

    • 时间复杂度:遍历一次字符串,时间复杂度为 O(n)O(n)O(n),其中 nnn 是字符串长度。
    • 空间复杂度:只使用了几个变量存储字符计数,空间复杂度为 O(1)O(1)O(1)。

测试与验证

  1. 测试样例

    • 输入字符串 "AUBTMKAxfuu",统计到 k 出现 1 次,u 出现 2 次,因此最多组成 1 个 "ku"。
    • 输入字符串 "KKuuUuUuKKKKkkkkKK",统计到 k 出现 10 次,u 出现 6 次,因此最多组成 6 个 "ku"。
    • 输入字符串 "abcdefgh",字符 ku 均未出现,返回 0。
  2. 边界测试

    • 空字符串:输入为空字符串 "",直接返回 0。
    • 无效字符:如果字符串中没有 ku,例如 "abcxyz",应返回 0。

难点与优化

  1. 难点分析

    • 需要注意大小写不敏感的要求,这可能导致误判。因此需要在处理时统一将字符串转为小写或大写。
    • 如何高效统计字符次数,并在遍历过程中同时完成字符计数和逻辑计算,是实现的关键。
  2. 优化点

    • 遍历字符串的过程中直接完成字符统计,避免额外的时间消耗。
    • 使用 Math.min 快速计算最大可能的 "ku" 数量。

总结

本题考察了基本的字符串处理能力,包括大小写转换、字符计数等,同时要求具备一定的逻辑思维来判断