题目链接:3325. 字符至少出现 K 次的子字符串 I(中等)
算法原理:
解法:滑动窗口
跟模板题基本一样👇
C.滑动窗口-求子数组个数-越长越合法------1358. 包含所有三种字符的子字符串数目(模板)
答疑
Q1:为什么只需判断进窗口元素出现的次数就可以呢?
因为只有进窗口的元素有可能次数超过K
Java代码:
java
class Solution {
public int numberOfSubstrings(String ss, int k) {
int[] hash=new int[26];
char[] s=ss.toCharArray();
int ret=0,left=0;
for(char c:s){
//进窗口
hash[c-'a']++;
//出窗口
while(hash[c-'a']>=k)
hash[s[left++]-'a']--;
//更新
ret+=left;
}
return ret;
}
}