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

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

时间:2024-11-12 14:30:05浏览次数:1  
标签:3258 满足条件 int 约束 满足 cnt0 字符串 数量

给你一个 二进制 字符串 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'。

解题思路:
题目要求计算一个字符串中满足特定条件的子字符串数量。具体来说,一个子字符串被视为满足条件的,如果它包含的0的数量不超过k,或者1的数量不超过k。
思路分析
1.双层循环遍历:
使用外层循环遍历字符串的每一个起始位置。
使用内层循环从当前起始位置遍历到字符串的末尾,构建不同的子字符串。
2.计数器:
在内层循环中,使用两个计数器 cnt0 和 cnt1 分别记录当前子字符串中0和1的数量。
3.条件判断:
每次构建一个新的子字符串时,检查 cnt0 和 cnt1 是否满足条件(即 cnt0 <= k 或 cnt1 <= k)。
如果满足条件,则将满足条件的子字符串数量 ans 增加1。
4.返回结果:
最后返回满足条件的子字符串总数 ans。

完整代码:
    /**
     * 计算字符串中满足特定条件的子字符串数量
     * 一个子字符串被视为满足条件的,如果它包含的0的数量不超过k,或者1的数量不超过k
     * 
     * @param s 输入的字符串,只包含字符'0'和'1'
     * @param k 子字符串中0或1的最大允许数量
     * @return 满足条件的子字符串数量
     */
    public int countKConstraintSubstrings(String s, int k) {
        // 字符串长度
        int n = s.length();
        // 用于累计满足条件的子字符串数量
        int ans = 0;
        // 外层循环遍历字符串的起始位置
        for (int i = 0; i < n; i++) {
            // 初始化计数器,分别用于统计当前子字符串中0和1的数量
            int cnt0 = 0, cnt1 = 0;
            // 内层循环从当前起始位置遍历到字符串末尾,构建不同的子字符串
            for (int j = i; j < n; j++) {
                // 根据字符类型更新计数器
                if (s.charAt(j) == '0') {
                    cnt0++;
                } else {
                    cnt1++;
                }
                // 如果当前子字符串中0或1的数量不超过k,则认为该子字符串满足条件,累计数量增加
                if (cnt0 <= k || cnt1 <= k) {
                    ans++;
                }
            }
        }
        // 返回满足条件的子字符串总数
        return ans;
    }

标签:3258,满足条件,int,约束,满足,cnt0,字符串,数量
From: https://www.cnblogs.com/java-cheng/p/18541864

相关文章

  • 反转字符串中的元音字母
    力扣链接:.-力扣(LeetCode)给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。元音字母包括 'a'、'e'、'i'、'o'、'u',且可能以大小写两种形式出现不止一次。示例1输入:s="IceCreAm"输出:"AceCreIm"解释:s 中的元音是 ['I','e',&......
  • 字符串函数strcpy.strcat.strcmp的应用和模拟实现
    strcpy的应用和模拟实现strcpy详解:先来看下官网对strcmp的介绍。绿色部分括号内为需要的两个参数.第一个char*destination指的是目标字符串的起始地址;第二个consetchar*source指的是要拷贝的字符串;最前面的char*strcpy表明返回类型为字符指针.(返回......
  • 代码随想录第八天|字符串part01--344.反转字符串、541.反转字符串Ⅱ、卡玛网54.替换数
    资源引用:leetcode题目:344.反转字符串(344.反转字符串-力扣(LeetCode))541.反转字符串Ⅱ(541.反转字符串II-力扣(LeetCode))卡玛网题目:卡玛网54.替换数字(54.替换数字(第八期模拟笔试)(kamacoder.com))碎碎念回归:本来应该11月6号打卡的,因为接连4天的考试+多个竞赛,导致推迟......
  • 图像转字符串
    图像转字符串publicstaticStringimageToString(StringfilePath){try(FileInputStreamimageInFile=newFileInputStream(filePath)){byte[]imageBytes=newbyte[(int)newFile(filePath).length()];imageInFile.read(imageBytes);String......
  • 3258. 统计满足 K 约束的子字符串数量 I
    题目链接解题思路小字符串不满足了,那么包含此小字符串的大字符串肯定不满足。大字符串满足,那么该字符串的所有子串都满足条件。所以,我们就可以把问题转成,「以i开头的字符串,满足条件的,最长多长?」然后再根据这个结果,计算以i开头的所有子串数目即可。计算了「以i开头的最长......
  • 【优选算法 — 滑动窗口】水果成篮 & 找到字符串中所有字母异位词
         水果成篮  水果成篮  题目描述  因为只有两个篮子,每个篮子装的水果种类相同,如果从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等,不提供......