ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【字符串】力扣696:计数二进制子串

2022-07-01 17:38:27  阅读:132  来源: 互联网

标签:子串 696 数字 力扣 连续 字符串 长度 cur


给定一个字符串 s,统计并返回具有相同数量 0 和 1 的非空(连续)子字符串的数量,并且这些子字符串中的所有 0 和所有 1 都是成组连续的。

重复出现(不同位置)的子串也要统计它们出现的次数。

示例:

输入:s = "00110011"
输出:6
解释:6 个子串满足具有相同数量的连续 1 和 0 :"0011"、"01"、"1100"、"10"、"0011" 和 "01" 。
注意,一些重复出现的子串(不同位置)要统计它们出现的次数。
另外,"00110011" 不是有效的子串,因为所有的 0(还有 1 )没有组合在一起。

从左往右遍历数组,记录和当前位置数字相同且连续的长度,以及其之前连续的不同数字的长度。

例如:对于 00110 的最后一位,记录的相同数字长度是 1,因为只有一个连续 0;记录的不同数字长度是 2,因为在 0 之前有两个连续的 1。若不同数字的连续长度大于等于当前数字的连续长度,则说明存在一个且只存在一个以当前数字结尾的满足条件的子字符串。

class Solution:
    def countBinarySubstrings(self, s: str) -> int:
        n = len(s)
        if n == 0 or n == 1:
            return 0
        pre, cur, count = 0, 1, 0 # 注意cur初始化为1,即默认将第1个元素作为current,也便于 i 从第2个元素开始循环
        for i in range(1, n):
            if s[i] == s[i - 1]:
                cur += 1
            else:
                pre = cur
                cur = 1
            if pre >= cur:
                count += 1
        return count

时间复杂度:O(n)
空间复杂度:O(1)

标签:子串,696,数字,力扣,连续,字符串,长度,cur
来源: https://www.cnblogs.com/Jojo-L/p/16435358.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有