一天一大 lee(计数二进制子串)难度:简单-Day20200810
时间:2022-07-25
本文章向大家介绍一天一大 lee(计数二进制子串)难度:简单-Day20200810,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目:
给定一个字符串 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”字符。
抛砖引玉
抛砖引玉
思路
- 统计连续相同字符长度
- 两个相同字符组合,组合出能满足要求的字符种类为重复较少的判断数 0001100011 -> [3,2,3,2]
- 3 - 2 -> 00011 -> 0011 01 ->2 ...
- 2+2+2 -> 6
/**
* @param {string} s
* @return {number}
*/
var countBinarySubstrings = function (s) {
let _result = 0,
len = s.length,
prev = 0,
i = 0;
while (i < len) {
let j = 0,
item = s.charAt(i);
while (i < len && s.charAt(i) === item) {
++i
++j
}
_result += Math.min(prev, j)
prev = j;
}
return _result
}
分离字符变化位置
- 从上面可以发现:主要的逻辑是统计字符出现的连续个数
- 那找到字符发生变化的位置,分割计算每个片段的长度就可以得到每个判断的长度
/**
* @param {string} s
* @return {number}
*/
var countBinarySubstrings = function(s) {
let dp = s.replace(/01/g,'0|1').replace(/10/g,'1|0').split('|'),
_result = 0
for (let i = 1; i < dp.length; ++i) {
_result += Math.min(dp[i].length, dp[i - 1].length)
}
return _result
};
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- MySQL InnoDB表空间加密
- 微信小程序自动化测试最佳实践(附 Python 源码)
- 3分钟短文 | MySQL在分组时,把多列合并为一个字段!
- Redis Linux系统参数最佳配置
- 实现Promise其它API
- 使用sysbench进行压测 Part1 sysbench安装
- Java并发编程(07):Fork/Join框架机制详解
- PostgreSQL Pgbouncer 到底怎么使用,疗效有多大
- 微信练手小程序源码 - 日历(含各种功能组件)
- Redis 5.0.8安装
- Redis 主从搭建
- Redis 5.0.8 主从+哨兵的搭建
- ammo.js-bullet物理引擎碰撞检测
- TKE上动态部署jenkins slaves
- CVE-2017-0261及利用样本分析