aeiou和小巧思
原文链接:https://www.cnblogs.com/Time25/p/19705006.html
lc 3306. 元音辅音字符串计数 II
aeiou没必要一个一个敲
一个班级有10个人至少20岁,有3个人至少21岁,那么恰好20岁得人是多少?就是10-7,这题可以用这个思路来写,(灵神nb)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 class Solution {
const string VOWEL = "aeiou";
//后面可以用VOWEL.find(x)!=string::npos
long long f(string& word, int k) {
long long ans = 0;
// 这里用哈希表实现,替换成数组会更快
unordered_map<char, int> cnt1; // 每种元音的个数
int cnt2 = 0; // 辅音个数
int left = 0;
for (char b : word) {
if (VOWEL.find(b) != string::npos) {
cnt1[b]++;
} else {
cnt2++;
}
while (cnt1.size() == 5 && cnt2 >= k) {
char out = word[left];
if (VOWEL.find(out) != string::npos) {
if (--cnt1[out] == 0) {
cnt1.erase(out);
}
} else {
cnt2--;
}
left++;
}
ans += left;//变成求至少有k个元音字符得子数组
//就跟前面子数组得写法是一样得
}
return ans;
}
//一个班级有10个人至少20岁,有3个人至少21岁,那么恰好20岁得就是10-3=7人,这道题也是这样写
public:
long long countOfSubstrings(string word, int k) {
return f(word, k) - f(word, k + 1);
}
};
// TRAINING LOG · 第 22 / 76 篇训练记录 · 成文于 2026.03.11 · 深夜 23:06
本文是原创文章,采用CC BY-NC-SA 4.0许可协议,完整转载请注明来自FMAN720 / ALGO LOG
