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

重复出现的子串要计算它们出现的次数。

示例 1 :

输入: “00110011”
输出: 6
解释: 有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。

请注意,一些重复出现的子串要计算它们出现的次数。

另外,“00110011”不是有效的子串,因为所有的0(和1)没有组合在一起。

示例 2 :

输入: “10101”
输出: 4
解释: 有4个子串:“10”,“01”,“10”,“01”,它们具有相同数量的连续1和0。

注意:

  • s.length 在1到50,000之间。
  • s 只包含“0”或“1”字符。

字符分组

我们可以将字符串 sss 按照 000 和 111 的连续段分组,存在 counts\rm countscounts 数组中,例如 s=00111011s = 00111011s=00111011,可以得到这样的 counts\rm countscounts 数组:counts={2,3,1,2}{\rm counts} = \{2, 3, 1, 2\}counts={2,3,1,2}。

这里 counts\rm countscounts 数组中两个相邻的数一定代表的是两种不同的字符。假设 counts\rm countscounts 数组中两个相邻的数字为 uuu 或者 vvv,它们对应着 uuu 个 000 和 vvv 个 111,或者 uuu 个 111 和 vvv 个 000。它们能组成的满足条件的子串数目为 min⁡{u,v}\min \{ u, v \}min{u,v},即一对相邻的数字对答案的贡献。

对于某一个位置 iii,其实我们只关心 i−1i - 1i−1 位置的 counts\rm countscounts 值是多少,所以可以用一个 last\rm lastlast 变量来维护当前位置的前一个位置,这样可以省去一个 counts\rm countscounts 数组的空间。

Code

 def countBinarySubstrings(self, s: str) -> int:ans, cur, last, length = 0, 0, 0, len(s)while cur < length:c, count = s[cur], 0while cur < length and s[cur] == c:cur += 1count += 1ans += min(count, last)last = countreturn ans

复杂度分析

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

696. Count Binary Substrings 计数二进制子串相关推荐

  1. LeetCode刷题记录6——696. Count Binary Substrings(easy)

    LeetCode刷题记录6--696. Count Binary Substrings(easy) 目录 LeetCode刷题记录6--696. Count Binary Substrings(eas ...

  2. LeetCode - Easy - 696. Count Binary Substrings

    Topic String Description https://leetcode.com/problems/count-binary-substrings/ Give a string s, cou ...

  3. LeetCode 696. Count Binary Substrings

    题目: Give a string s, count the number of non-empty (contiguous) substrings that have the same number ...

  4. LeetCode 696. 计数二进制子串

    1. 题目 给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的. 重复出现的子串要计算它们出现的次数. 示例 1 : 输入: & ...

  5. leetcode696. 计数二进制子串

    给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的. 重复出现的子串要计算它们出现的次数. 示例 1 : 输入: "0 ...

  6. 一天一大 lee(计数二进制子串)难度:简单-Day20200810

    题目: 给定一个字符串 s,计算具有相同数量 0 和 1 的非空(连续)子字符串的数量,并且这些子字符串中的所有 0 和所有 1 都是组合在一起的. 重复出现的子串要计算它们出现的次数. 示例 示例 ...

  7. binary - 从(向)二进制串插入和提取字段 / BINARY FORMAT BINARY SCAN

    binary - 从(向)二进制串插入和提取字段??? SYNOPSISbinary format formatString ?arg arg ...?binary scan string forma ...

  8. SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子

    一起来学演化计算-SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子 觉得有用的话,欢迎一起讨论相互学习 ...

  9. SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子...

    一起来学演化计算-SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子 觉得有用的话,欢迎一起讨论相互学习 ...

最新文章

  1. 为什么程序员都不喜欢使用 switch ,而是大量的 if……else if ?
  2. cdh 安装_0623-6.2.0-如何在CDH中安装CFM
  3. mysql场景测试_【干货】不同场景下 如何进行MySQL迁移
  4. Fashion-MNIST数据集离线加载办法
  5. SIP代理服务器(2)
  6. Makefile学习之通配符和自动变量
  7. SpringMVC之Controller和参数绑定
  8. Table of Contents
  9. java游戏下载网址_手机java游戏下载网站
  10. nodejs、express下载和配置
  11. 简易局域网聊天java_简单的局域网聊天程序(java版本的)
  12. 离线安装Python包的三种方法
  13. 如何取消html中页眉的下划线,怎么取消页眉页脚的横线_怎样取消页眉上的横线-win7之家...
  14. Layui数据表格每一行动态显示倒计时
  15. iframe中加载html,在iframe中加载外部html并访问内容
  16. 小明Q2投影仪好用吗?小明Q2和哈趣K1哪个更值得入手?
  17. LED和LCD,LED和OLED,AMOLED和OLED有什么区别
  18. 计算机及通讯公司转正申请(范文)
  19. win10内存占用率过高怎么办_win10 软件推荐
  20. 去除空格,水平制表符:CHAR(9)、换行符:CHAR(10)、回车符:CHAR(13)

热门文章

  1. 【BZOJ 1096】[ZJOI2007]仓库建设
  2. RPM安装包-Spec文件參数具体解释与演示样例分析
  3. SQL SERVER – Beginning of SQL Server Architecture – Terminology – Guest Post
  4. silverlight 使用IValueConverter 转换
  5. 使用asp.net中的跟踪功能
  6. 活体检测方法概述与总结
  7. scrapy 解析css,Scrapy基础(六)————Scrapy爬取伯乐在线一通过css和xpath解析文章字段...
  8. Java黑皮书课后题第10章:*10.14(MyDate类)设计一个名为MyDate的类
  9. oracle jdbctype null,Oracle数据库之springboot 项目mybatis plus 设置 jdbcTypeForNull
  10. 日志 php_高性能的PHP日志系统 SeasLog 使用