当前位置: 首页 > article >正文

【LeetCode】每日一题 2024_11_12 统计满足 K 约束的子字符串数量 I(滑动窗口)

前言

每天和你一起刷 LeetCode 每日一题~

LeetCode 启动!

题目:统计满足 K 约束的子字符串数量 I

这道题给了很小的数据范围,能够直接用暴力通过(不过我对滑窗比较熟悉,所以也就直接用滑窗解答了~)

代码与解题思路

先读题:

题目要求找 0 不超过 k 个, 1 不超过 k 个的子数组(注意:只有 0 和 1 都超过 k 个才算违反的题目要求),直接通过滑动窗口来维护这个子数组,r 指针给子数组添加元素,不符合题目条件就让 l 指针减少元素,代码如下:(我平时用的滑窗模版)

func countKConstraintSubstrings(s string, k int) (ans int) {
    // 经典的子数组型滑窗
    l, cnt := 0, [2]int{}
    for r := range s {
        if s[r] == '0' {
            cnt[0]++
        } else {
            cnt[1]++
        }
        // 题目要求满足 0 和 1 两个数量都超过 k 才算违反
        for cnt[0] > k && cnt[1] > k {
            if s[l] == '0' {
                cnt[0]--
            } else {
                cnt[1]--
            }
            l++
        }
        ans += r-l+1
    }
    return ans
}

小优化(精简代码)

小细节:字符 0 的 ASCII 值是偶数,所以我们可以通过 &1 的方式直接区分 0 和 1

func countKConstraintSubstrings(s string, k int) (ans int) {
    l, cnt := 0, [2]int{}
    for r := range s {
        cnt[s[r]&1]++
        for cnt[0] > k && cnt[1] > k {
            cnt[s[l]&1]--
            l++
        }
        ans += r-l+1
    }
    return ans
}

每天进步一点点,我们明天不见不散~

可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。


http://www.kler.cn/a/391810.html

相关文章:

  • 十三、注解配置SpringMVC
  • 【算法】——二分查找合集
  • 系统上线后发现bug,如何回退版本?已经产生的新业务数据怎么办?
  • request爬虫库的小坑
  • 使用 Visual Studio Installer 彻底卸载 Visual Studio方法与下载
  • Xshell,Shell的相关介绍与Linux中的权限问题
  • 【JAVA毕业设计】基于Vue和SpringBoot的微服务在线教育系统
  • 什么是 DAPP?它能解决什么问题?
  • pinia-plugin-persistedstate包安装失败解决办法
  • 推动企业数字化转型的三驾马车:DataOps与DevOps、MLOps的关系及其重要性
  • 数字后端教程之Innovus report_property和get_property使用方法及应用案例
  • 关于Flutter空安全升级方案整理
  • 基于Spring Boot的瑜伽馆管理系统设计与实现,LW+源码+讲解
  • Javascript 笔记(二):闭包(2)与map知识点
  • 如何对PHP的API接口权限认证
  • ubuntu串口权限修改
  • PO 证书链
  • Vue.js动态组件使用
  • 179页PPT企业架构规划设计方案
  • 假期增加2天!matplotlib绘制2025年一整年日历
  • Ai创作新风标!仅需三步,利用ai工具免费制作抖音爆款的动物融合视频(含完整的步骤)
  • 深入理解接口测试:实用指南与最佳实践5.0(二)
  • Java基础-Java多线程机制
  • 【activiti工作流源码集成】springboot+activiti+mysql+vue+redis工作流审批流集成整合业务绑定表单流程图会签驳回
  • Vim9 语法高亮syntax 在指定的缓冲区和窗口执行命令
  • Java 中的 Predicate:让判断逻辑更清晰灵活