青训营X豆包MarsCode技术训练营 | 豆包MarsCode AI刷题

98 阅读2分钟

字母出现次数统计【中等】

问题描述

小R得到了一个由小写字母组成的字符串 s,她想知道有多少个小写字母在字符串中至少出现了 k 次。请你帮她解决这个问题。


测试样例

样例1:

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

样例2:

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

样例3:

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

这道题,标签显示是中等题,但实际去做才发现,其实应该是简单题,直接使用数组或者哈希表来记录每个字母出现次数,然后遍历每个字母,统计出现k次以上的字母个数,即可得到答案。

详细步骤:

  • 统计每个字母的出现次数:使用一个数组或哈希表来记录每个字母的出现次数。
    • 使用一个长度为26的数组 count 来记录每个字母的出现次数。
    • 遍历字符串 s,将每个字符转换为对应的数组索引(c - 'a'),并增加该索引处的计数值。
int[] count = new int[26]; 
for (char c : s.toCharArray()) { 
    count[c - 'a']++; 
}
  • 检查出现次数:遍历统计结果,检查每个字母的出现次数是否至少为 k 次。
    • 遍历数组 count,检查每个字母的出现次数是否至少为 k 次。
    • 如果满足条件,则增加结果计数 result
int result = 0; 
for (int i = 0; i < 26; i++) { 
    if (count[i] >= k) { result++; } 
}
  • 计数:统计满足条件的字母数量。

代码实现:

public class Main {
    public static int solution(String s, int k) {
        // 使用一个数组来记录每个字母的出现次数
        int[] count = new int[26];
        
        // 统计每个字母的出现次数
        for (char c : s.toCharArray()) {
            count[c - 'a']++;
        }
        
        // 计数满足条件的字母数量
        int result = 0;
        for (int i = 0; i < 26; i++) {
            if (count[i] >= k) {
                result++;
            }
        }
        
        return result;
    }

    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);
    }
}