字母出现次数统计【中等】
问题描述
小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'),并增加该索引处的计数值。
- 使用一个长度为26的数组
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);
}
}