LeetCode 3258.统计满足K约束的子字符串数量 I
题目:给你一个整数数组 nums
和一个整数 k
,请你返回子数组内所有元素的乘积严格小于 k
的连续子数组的数目。
思路:
计算以 0 为右端点的合法子串个数,以 1 为右端点的合法子串个数,……,以 n−1 为右端点的合法子串个数。
我们需要知道以 i 为右端点的合法子串,其左端点最小是多少。
代码:
class Solution {public int countKConstraintSubstrings(String s, int k) {char[] ch = s.toCharArray();int n = ch.length;int left = 0;int ans = 0;int[] cnt = new int[2];for (int right = 0; right < n; right++) {if (ch[right] == '0') {cnt[0] += 1;} else {cnt[1] += 1;}while (cnt[0] > k && cnt[1] > k) {char out = ch[left];if (out == '0') {cnt[0] -= 1;} else {cnt[1] -= 1;}left++;}ans += right - left + 1;}return ans;}
}
性能: