leetcode-696. 计数二进制子串

匿名 (未验证) 提交于 2019-12-03 00:27:02

一、问题描述

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。

二、代码和思路

第一次:

主要考虑左右连续二进制数的长度,然后选择两者之间的最小值加入到count,从右边的开始位置继续遍历

这样相当于重复遍历右边的连续二进制的数量,做了下面第二次的改进

class Solution(object):

















第二次:

1.这里首先查看第一次连续相等二进制的长度,记录

2.寻找第二个连续相等二进制的长度,与第一次长度相比的较小值加到count,并将第二次的连续相等二进制的长度记录

3.重复1,2,这里的算法复杂度相当于O(n)

class Solution(object):




















三、运行结果


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!