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

每日一题|3258. 统计满足 K 约束的子字符串数量 I|滑动窗口

1. 枚举

数据量不大,枚举直接拿下。

class Solution:
    def countKConstraintSubstrings(self, s: str, k: int) -> int:
        res = 0
        for i in range(len(s)):
            count = [0, 0]
            for j in range(i, len(s)):
                count[int(s[j])] += 1
                if count[0] > k and count[1] > k:
                    break
                res += 1
        return res

 2. 滑动窗口

枚举的时间开销是O(n * n),很不美丽,所以需要找到一个不用全部遍历所有子字符串的方法。

如果一个字符串在一个区间内满足该条件,那么其中每一个子串都满足条件。

那么,如何一条不落下计入全部的子字符串呢?

答案是先固定一侧的指针,统计另一侧到这边一共有多少子串。

也就是说,我们对于每一个能够最大限度满足条件的区间求其一端到另一端的全部子串即可。这样一个需要消耗时间的遍历就变成了首尾索引的运算,节省了时间。

那么如何找到然后更新这个“最大长度”区间呢?

一侧动,另一侧不动。滑动窗口。

在出现右侧指针超过界限的时候,移动左侧指针,直到区间重新满足条件。

然后计算右侧指针不动的情况下的子串。

class Solution:
    def countKConstraintSubstrings(self, s: str, k: int) -> int:
        res = 0
        left = 0
        count = [0, 0]
        for i, c in enumerate(s):
            count[int(c) & 1] += 1
            while count[0] > k and count[1] > k:
                count[int(s[left]) & 1] -= 1
                left += 1
            res += i - left + 1
        return res

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

相关文章:

  • JWT深度解析:Java Web中的安全传输与身份验证
  • 微服务day07
  • 虚拟机安装Ubuntu 24.04服务器版(命令行版)
  • 类别变量分析——卡方独立性检验卡方拟合优度检验
  • Flink_DataStreamAPI_输出算子Sink
  • fastapi 查询参数支持 Pydantic Model:参数校验与配置技巧
  • 手写JDK动态代理实现AOP
  • c# 开发web服务 webserver
  • MFC 重写了listControl类(类名为A),并把双击事件的处理函数定义在A中,主窗口如何接收表格是否被双击
  • sql速度优化多条合并为一条语句
  • 关于git使用的图文教程(包括基本使用,处理冲突问题等等)超详细
  • 调整TCP参数, 优化网络性能
  • 基于springboot的家装平台设计与实现
  • 【HCIP园区网综合拓扑实验】配置步骤与详解(已施工完毕)
  • 整合本地市场机会 同城小程序打造社区商圈
  • Uniapp去除顶部导航栏-小程序、H5、APP适用
  • 专业140+总分430+复旦大学875信号与系统考研经验原957电子信息通信考研,真题,大纲,参考书。
  • ssm基于BS的仓库在线管理系统的设计与实现+vue
  • 单链表算法题(数据结构)
  • 【网络安全 | 漏洞挖掘】Google SSO用户的帐户接管
  • 人工智能学习--分类模型的训练和应用
  • 了解 Open RAN 架构中的 DU 和 CU
  • c语言编程题(函数)
  • 如何在MT4中实现神经网络EA?
  • AI与隐私:Facebook如何在数据保护中平衡创新与安全
  • stm32对EV1527波形进行解码