LeetCode:3258.统计满足k约束的子串数量 I(滑动窗口 Java)

目录

[3258.统计满足k约束的子串数量 I](#3258.统计满足k约束的子串数量 I)

题目描述:

实现代码与解析:

滑动窗口

原理思路:


3258.统计满足k约束的子串数量 I

题目描述:

给你一个 二进制 字符串 s 和一个整数 k

如果一个 二进制字符串 满足以下任一条件,则认为该字符串满足 k 约束

  • 字符串中 0 的数量最多为 k
  • 字符串中 1 的数量最多为 k

返回一个整数,表示 s 的所有满足 k 约束的子字符串的数量。

示例 1:

**输入:**s = "10101", k = 1

**输出:**12

解释:

s 的所有子字符串中,除了 "1010""10101""0101" 外,其余子字符串都满足 k 约束。

示例 2:

**输入:**s = "1010101", k = 2

**输出:**25

解释:

s 的所有子字符串中,除了长度大于 5 的子字符串外,其余子字符串都满足 k 约束。

示例 3:

**输入:**s = "11111", k = 1

**输出:**15

解释:

s 的所有子字符串都满足 k 约束。

提示:

  • 1 <= s.length <= 50
  • 1 <= k <= s.length
  • s[i]'0''1'

Related Topics

  • 字符串
  • 滑动窗口

实现代码与解析:

滑动窗口

java 复制代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int countKConstraintSubstrings(String s, int k) {

        int n = s.length();
        int res = 0;
        int l = 0;
        int cnt0 = 0, cnt1 = 0;
        for (int r = 0; r < n; r++) {
            if (s.charAt(r) == '0') {
                cnt0++;
            }
            if (s.charAt(r) == '1') {
                cnt1++;
            }
            while (cnt0 > k && cnt1 > k) {
                if (s.charAt(l) == '0') cnt0--;
                if (s.charAt(l) == '1') cnt1--;
                l++;
            }
            res += r - l + 1;
        }
        return res;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

原理思路:

遍历右指针,记录0和1的个数,求出当前右指针情况下,满足条件的最长长度。如果满足条件,收缩左指针,直到满足条件。

相关推荐
MicroTech20252 分钟前
量子仿真新基石:MLGO微算法科技专用地址生成器驱动量子算法仿真革命
科技·算法·量子计算
shejizuopin3 分钟前
基于SSM的高校旧书交易系统的设计与实现(任务书)
java·mysql·毕业设计·论文·任务书·基于ssm的·高校旧书交易系统的设计与实现
WBluuue4 分钟前
数据机构与算法:dp优化——倍增优化
c++·算法·leetcode·动态规划
1candobetter11 分钟前
JAVA后端开发——Spring Boot 组件化自动配置机制
java·开发语言·spring boot
码农小卡拉13 分钟前
MyBatis-Flex 全面解析与实战教程:轻量高效的 MyBatis 增强方案
java·mybatis
没有bug.的程序员14 分钟前
Spring Boot 与 Sleuth:分布式链路追踪的集成、原理与线上故障排查实战
java·spring boot·分布式·后端·分布式链路追踪·sleuth·线上故障排查
范纹杉想快点毕业16 分钟前
嵌入式实时系统架构设计:基于STM32与Zynq的中断、状态机与FIFO架构工程实战指南,基于Kimi设计
c语言·c++·单片机·嵌入式硬件·算法·架构·mfc
lovod17 分钟前
【视觉SLAM十四讲】建图
算法·视觉slam
专注VB编程开发20年19 分钟前
无 $ 后缀的变体版函数(Mid、InStr)
java·开发语言
牛马11121 分钟前
flutter Riverpod 中的 overrideWith
android·java·flutter