元音辅音字符串计数 II

给你一个字符串 word 和一个 非负 整数 k。
返回 word 的子字符串中,每个元音字母(’a’、’e’、’i’、’o’、’u’)至少 出现一次,并且 恰好 包含 k 个辅音字母的子字符串的总数。

  • 输入:word = “aeioqq”, k = 1
    输出:0
    解释:
    不存在包含所有元音字母的子字符串。

  • 输入:word = “aeiou”, k = 0
    输出:1
    解释:
    唯一一个包含所有元音字母且不含辅音字母的子字符串是 word[0..4],即 “aeiou”。

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
var countOfSubstrings = function (word, k) {
const getAns = (word, k) => {
const map = new Map();
const s = ['a', 'e', 'i', 'o', 'u'];
let count = 0;
let ans = 0;
let l = 0, cur = 0;
for (let i = 0; i < word.length; i++) {
if (s.indexOf(word[i]) >= 0) {
map.set(word[i], map.get(word[i]) + 1 || 1);
} else {
count++;
}
while (count >= k && map.size == 5) {
if (s.indexOf(word[l]) >= 0) {
map.set(word[l], map.get(word[l]) - 1);
if (map.get(word[l]) == 0) {
map.delete(word[l]);
}
} else {
count--;
}
l++;
}
ans += l;
}
return ans;
}
return getAns(word, k) - getAns(word, k + 1);
};