一、题目

二、思路
采用滑动窗口来解决,设置窗口 [left, right],left 和 right 起始位置都在0处。枚举右端点,出现合法区间后,右移左端点至第一个不合法区间,此时左端点就是合法子数组的个数。

三、代码
class Solution {
public int numberOfSubstrings(String s, int k) {
int ans = 0, left = 0;
char[] S = s.toCharArray();
char[] cnt = new char[26];
for (char c : S) {
cnt[c - 'a']++;
// 当出现合法区间后固定右端点,右移左端点
while (cnt[c - 'a'] == k) {
cnt[S[left] - 'a']--;
left++;
}
ans += left;// 左端点就是合法子数组的个数
}
return ans;
}
}
1058

被折叠的 条评论
为什么被折叠?



