字符至少出现 K 次的子字符串 I

给你一个字符串 s 和一个整数 k,在 s 的所有子字符串中,请你统计并返回 至少有一个 字符 至少出现 k 次的子字符串总数。
子字符串 是字符串中的一个连续、 非空 的字符序列。

  • 输入: s = “abacb”, k = 2
    输出: 4
    解释:
    符合条件的子字符串如下:
    “aba”(字符 ‘a’ 出现 2 次)。
    “abac”(字符 ‘a’ 出现 2 次)。
    “abacb”(字符 ‘a’ 出现 2 次)。
    “bacb”(字符 ‘b’ 出现 2 次)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var numberOfSubstrings = function (s, k) {
let ans = 0;
const n = s.length;
let book = new Array(26).fill(0);
for (let i = j = 0; j < n; j++) {
let code_j = s[j].charCodeAt(0) - 97;
book[code_j]++;
if (book[code_j] >= k) ans += n - j;
while (i < j && book[code_j] >= k) {
let code = s[i].charCodeAt(0) - 97;
book[code]--;
i++;
if (book[code_j] >= k && i < j) ans += n - j;
}
}
return ans;
};