首页 > 其他分享 >3258. 统计满足 K 约束的子字符串数量 I

3258. 统计满足 K 约束的子字符串数量 I

时间:2024-11-12 09:43:09浏览次数:1  
标签:3258 zeroNums 窗口 int 约束 oneNums 开头 字符串

  1. 题目链接

  2. 解题思路

    • 小字符串不满足了,那么包含此小字符串的大字符串肯定不满足。
    • 大字符串满足,那么该字符串的所有子串都满足条件。所以,我们就可以把问题转成,「以i开头的字符串,满足条件的,最长多长?」然后再根据这个结果,计算以i开头的所有子串数目即可。
    • 计算了「以i开头的最长的结果」,怎么计算「以i+1开头的最长的结果」?滑动窗口,假设以i开头结果是[i, j],窗口大小就是[i, j],此时,把i移出窗口,看右侧窗口是否还能扩大。
  3. 代码

    class Solution {
    public:
        int countKConstraintSubstrings(string s, int k) {
            int j = -1;
            int ans = 0;
            int n = s.length();
            int oneNums = 0;
            int zeroNums = 0;
            for (int i = 0; i < n; ++i) {
                // 把 i - 1移出窗口
                if (i > 0) {
                    switch (s[i - 1]) {
                        case '0':
                            zeroNums--;
                        break;
                        case '1':
                            oneNums--;
                        break;
                    }
                }
                // 右侧窗口能扩吗?
                while(j + 1 < n) {
                    if (s[j + 1] == '0') {
                        if (zeroNums < k || oneNums <= k) {
                            j++;
                            zeroNums++;    
                        } else {
                            break;
                        }
                    } else if (s[j + 1] == '1' ) {
                        if (oneNums < k || zeroNums <= k) {
                            j++;
                            oneNums++;    
                        } else {
                            break;
                        }
                    } else {
                        break;
                    }
                }
                // 计算结果
                ans += j - i + 1;
            }
            return ans;
        }
    };
    

标签:3258,zeroNums,窗口,int,约束,oneNums,开头,字符串
From: https://www.cnblogs.com/ouyangxx/p/18541131

相关文章

  • 【优选算法 — 滑动窗口】水果成篮 & 找到字符串中所有字母异位词
         水果成篮  水果成篮  题目描述  因为只有两个篮子,每个篮子装的水果种类相同,如果从0开始摘,则只能摘0和1两个种类;因为当我们在两个果篮都装有水果的情况下,如果再走到下一颗果树,果树的水果种类不是果篮中的任意一种,则停止采摘;所以就是要找......
  • 844. 比较含退格的字符串
    题目说实话自己在尝试这道题的时候没什么清晰的思路和实现方法。看了官方题解,官方提供了两种方法:方法一:这个重构字符串刚开始也想到了,但是不知道怎么去实现,看了官方题解后,不禁一颤,噢,这是栈的运用啊,仔细想想,也觉得退格带来的效果真的很像栈顶元素的弹出。官方代码如下:class......
  • apropos——在 whatis 数据库中查找字符串
    转自于:https://github.com/jaywcjlove/linux-command,后不赘述apropos在whatis数据库中查找字符串补充说明apropos命令在一些特定的包含系统命令的简短描述的数据库文件里查找关键字,然后把结果送到标准输出。如果你不知道完成某个特定任务所需要命令的名称,可以使用一个关......
  • 关于我、重生到500年前凭借C语言改变世界科技vlog.17——字符函数&&字符串函数
    文章目录1.字符函数1.1字符分类函数1.1.1islower1.2字符转换函数1.2.1tolower2.字符串函数2.1strlen2.2strcpy和strncpy2.3strcat和strncat2.4strcmp和strncmp2.5strstr2.6strtok2.7strerror希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的......
  • 代码随想录算法训练营第十天 | 232.用栈实现队列+225. 用队列实现栈+20. 有效的括号+1
    加入训练营有点晚,没跟上任务就开始有些偷懒没有真的认真开始,从第十天开始下决心认真完成每天任务还有博客记录学习过程。栈与队列理论基础首先是学习了栈和队列的理论基础,队列 先进先出,栈 先进后出。栈 以底层容器完成其所有的工作,且对外接口统一,有.push,.pop等,不提供......
  • 差分约束的一些理解
    一般的转化不等式+建图+判断负环不加赘述图是否连通如果图不连通,那么证明约束条件并不能全部约束有两种办法解决这个问题建超级源点将每个点作为起点跑求dis的最大值/最小值对于Intervals最后考虑求\(dis\)的最大值对于LayoutG,和Capitalism最后要......
  • 物理约束➕深度学习代码示例
    好的,下面是一个结合物理机制与深度学习的示例代码。这个示例假设我们要预测土壤湿度(类似你的研究领域),并结合物理机制(例如,水的守恒)来改进模型的预测。示例:基于物理约束的土壤湿度预测模型在这个例子中,我们用深度学习模型预测土壤湿度,并在损失函数中加入水分守恒约束项,确保模型输......
  • 字符串(重要)
    //字符串(比赛,公司,必选项)#include<stdio.h>intmain(){   //"abc","123","黑马程序员"   charstr1[5]={'a','b','c','d','\0'};   chararr="abcd3";   charstr2[4]......
  • C++中string字符串的基础操作,学习
    string字符串常用函数substring()string.length()&&string.size()string.find()string.replace()string.substr()string初始化和声明#include<bits/stdc++.h>usingnamespacestd; intmain(){stringstr1;//空字符串stringstr2="hello,w......
  • C语言字符串和十六进制的相互转换方式
    C语言字符串和十六进制的相互转换方式-我就叫宋帅呀-博客园C语言的字符串操作并不像java,Csharp那样提供直接的方法,简单粗暴。所以,在转换的时候往往费力费时,近日做项目正好用到和java程序通讯,java发送过来的数据是十六进制数字组成的字符串,解析的时候颇费心思才算完成,所以......