字符串中小写字母出现次数的统计问题解析 | 豆包MarsCode AI刷题

68 阅读3分钟

字符串中小写字母出现次数的统计问题解析

在编程中,字符串处理是一个常见且重要的任务。有时候,我们需要对字符串中的字符进行计数,以了解某些字符或字符组的出现频率。在这个问题中,我们需要统计一个字符串中至少出现 k 次的小写字母的数量。这个问题看似简单,但却涉及到了字符串遍历、字符计数和条件判断等基本概念。下面,我们将详细解析这个问题,并提供一种有效的解决方案。

问题描述

给定一个由小写字母组成的字符串 s 和一个整数 k,我们需要计算字符串 s 中至少出现 k 次的小写字母的数量。

测试样例

  1. 输入:s = "aaabcd", k = 2 输出:1

    解释:在这个字符串中,只有字符 'a' 出现了 3 次,满足条件。

  2. 输入:s = "aacbcbdefghijklmnopqrstuvwxyz", k = 1 输出:26

    解释:每个字母都至少出现了 1 次,所以所有 26 个小写字母都满足条件。

  3. 输入:s = "zzzzzzabc", k = 3 输出:1

    解释:在这个字符串中,只有字符 'z' 出现了 6 次,满足条件。

解决方案

为了解决这个问题,我们可以采用以下步骤:

  1. 初始化一个数组:用于记录每个小写字母的出现次数。由于小写字母有 26 个,我们可以使用一个长度为 26 的整数数组 letterCounts

  2. 遍历字符串:对于字符串中的每个字符,将其转换为对应的索引('a' 对应索引 0,'b' 对应索引 1,依此类推),并在 letterCounts 数组中相应的位置上加 1。

  3. 统计满足条件的字符数量:遍历 letterCounts 数组,统计那些出现次数不少于 k 次的字母的数量。

实现代码

下面是上述步骤的具体实现代码:

public class Main {
    public static int solution(String s, int k) {
        // 使用一个数组来记录每个字母的出现次数
        int[] letterCounts = new int[26];

        // 统计每个字母的出现次数
        for (char c : s.toCharArray()) {
            letterCounts[c - 'a']++;
        }

        // 统计出现次数不少于 k 次的字母数量
        int count = 0;
        for (int freq : letterCounts) {
            if (freq >= k) {
                count++;
            }
        }

        return count;
    }

    public static void main(String[] args) {
        // 测试样例
        System.out.println(solution("aaabcd", 2) == 1);
        System.out.println(solution("aacbcbdefghijklmnopqrstuvwxyz", 1) == 26);
        System.out.println(solution("zzzzzzabc", 3) == 1);
    }
}

代码解析

  1. 初始化数组

    int[] letterCounts = new int[26];
    

    这里,我们创建了一个长度为 26 的数组,用于存储每个小写字母的出现次数。

  2. 遍历字符串

    for (char c : s.toCharArray()) {
        letterCounts[c - 'a']++;
    }
    

    我们将字符串转换为字符数组,然后遍历每个字符。通过 c - 'a' 将字符转换为对应的索引(0 到 25),并在数组中相应的位置上加 1。

  3. 统计满足条件的字符数量

    int count = 0;
    for (int freq : letterCounts) {
        if (freq >= k) {
            count++;
        }
    }
    

    我们遍历 letterCounts 数组,如果某个字母的出现次数不少于 k 次,则计数器 count 加 1。

  4. 输出结果

    System.out.println(solution("aaabcd", 2) == 1);
    System.out.println(solution("aacbcbdefghijklmnopqrstuvwxyz", 1) == 26);
    System.out.println(solution("zzzzzzabc", 3) == 1);
    

    main 方法中,我们调用 solution 方法,并打印结果以验证其正确性。

总结

这个问题展示了如何通过遍历字符串、使用数组进行字符计数,以及条件判断来解决实际问题。这种方法在字符串处理中非常常见,可以应用于各种类似的计数问题。通过理解和实现这个解决方案,我们可以更好地掌握字符串处理的基本技巧,并为解决更复杂的问题打下基础。