题目链接:3258. 统计满足 K 约束的子字符串数量 I(简单)
算法原理:
解法:滑动窗口
击败100.00%
时间复杂度O(N)
跟上一题 C.滑动窗口------713. 乘积小于 K 的子数组 一样,同样要注意的是这是求子数组个数,所以ret+=right-left+1,而不是ret++
Java代码:
java
class Solution {
public int countKConstraintSubstrings(String ss, int k) {
char[] s=ss.toCharArray();
int n=s.length,zero=0,one=0,ret=0;
for(int left=0,right=0;right<n;right++){
//进窗口
if(s[right]=='0') zero++;
else one++;
//出窗口
while(zero>k&&one>k){
char out=s[left];
if(out=='0') zero--;
else one--;
left++;
}
//更新
ret+=right-left+1;
}
return ret;
}
}