LeetCode算法题-Count Binary Substrings(Java实现)

机器视觉学习(七)—— 卷积、边缘和滤波器 卷积运算、垂直边缘与水平边缘、滤波器 阅读详情

这是悦乐书的第293次更新,第311篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第161题(顺位题号是696)。给定一个字符串s,计算具有相同数字0和1的非空且连续子串的数量,并且这些子串中的所有0和所有1都是连续的。重复出现的子串也计算在内。例如:

输入:“00110011”

输出:6

说明:有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011”和“01”。其中一些子字符串重复出现了,但是也需要计算它们出现的次数。此外,“00110011”不是有效的子字符串,因为所有0(和1)都没有组合在一起。


输入:“10101”

输出:4

说明:有4个子串:“10”,“01”,“10”,“01”具有相同数量的连续1和0。


注意:

  • 字符串长度将介于1到50,000之间。

  • s只包含“0”或“1”字符。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

题目的意思是在给定的字符串中找到连续的0和1组成的子串个数,其中0和1是挨着的,可以有多个连续的0与多个连续的1。比如,0011,其中就有两个子串符合,一是第二位与第三位组成的01,二是其本身,两个0和两个1。再比如00111,同样也只有两个子串符合,一是01,二是0011。所以,我们的判断标准就变成了,在一个由0和1组成的连续子串中,0的个数与1的个数,取其中的较小值,就是可能的子串数。

对此,我们将原字符串中,将每段连续的0或者1的个数统计出来,然后比较相邻的两段的值,取其中较小的进行累加,最后就是该字符串所有可能的子串数。

此解法的时间复杂度是O(n),空间复杂度是O(n)。

public int countBinarySubstrings(String s) {
    int[] arr = new int[s.length()];
    arr[0] = 1;
    int index = 0;
    for (int i=1; i<s.length(); i++) {
        if (s.charAt(i) != s.charAt(i-1)) {
            arr[++index] = 1;
        } else {
            arr[index]++;
        }
    }
    int count = 0;
    for (int i=1; i <= index; i++) {
        count += Math.min(arr[i], arr[i-1]);
    }
    return count;
}

03 第二种解法

第一种解法中,我们将每段分组的值存到了新数组中,在分段完后,再去计算总数,但是我们也可以不使用新数组,直接在统计分段时,就将值累加起来。我们使用两个临时变量,一个存储当前这段分组的长度,一个存储上一段分组的长度,在循环字符串中的字符时,如果当前字符和前一个字符不相等,说明该分段了,此时需要先比较两个临时变量的值,取较小的累加到count上去,然后将上一段的长度赋值给另外一个变量,当前新段的长度重置为1。在循环结束后,还需要再取两者之间的较小值再累加一次,因为有可能最后一段就是连续的,而不能在循环里进行判断了。

public int countBinarySubstrings(String s) {
    int currentLength = 1, prevLength = 0, count = 0;
    for (int i=1; i<s.length(); i++) {
        if (s.charAt(i) != s.charAt(i-1)) {
            count += Math.min(prevLength, currentLength);
            prevLength = currentLength;
            currentLength = 1;
        } else {
            currentLength++;
        }    
    }
    count += Math.min(prevLength, currentLength);
    return count;
}

04 小结

算法专题目前已日更超过四个月,算法题文章161+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

数据去重复_京东商品评论情感分析|文本数据预处理 本文爬取了十款热销手机的文本评论数据后,首先对文本评论数据做文本预处理,文本评论数据中存在大量的无价值信息,引入无用的文本数据,对其作情感分析,显然没有价值,得出的文本挖掘结果也不尽人意。所以对于文本评论数据先进行文本预处理是必不可少的一步,把大量的、冗余的、无价值的信息去除,可以极大提高文本数据的质量,精确文本分析结果。1 文本去重1.1文本去重的原因文本数据预处理时,首先应去除文本评论数据中反... 阅读详情

相关推荐

OPC UA 协议详解

OPC UA(统一架构)是新一代工业自动化标准通信协议,替代传统OPC Classic,具有跨平台、高安全性、标准化等优势。基于TCP协议,支持全平台部署,采用面向对象架构组织数据,提供实时读写、事件订阅、历史数据访问等功能。作为工业4.0核心协议,适用于智能制造、数字孪生等场景,能实现多品牌设备统一接入。相比Modbus和MQTT,OPC UA协议更规范安全但复杂度较高,是大型工业集群互联的主流选择。

eastyuxiao的专栏 732

leetcode 696. Count Binary Substrings 计数二进制子串(简单)

还可以从字符串的每个位置开始,向左向右延长,判断存在多少当前位置为中轴的由01连续二进制字符串。

ln_ydc的专栏 655

转录组分析中的Fastp和FastQC:如何快速检测数据质量并优化流程

本文深入探讨了转录组分析中数据质量控制的核心流程,重点介绍了Fastp和FastQC两款工具的组合应用。FastQC负责对原始测序数据进行全面质量评估,生成可视化报告;Fastp则能一站式完成接头切除、低质量序列过滤、长度筛选等关键质控步骤。文章提供了详细的参数解读、实战脚本和自动化流程构建指南,帮助研究人员快速检测数据质量并优化预处理流程,为下游的差异表达等分析奠定可靠基础。

weixin_28452161的博客 185

696. Count Binary Substrings

问题: Give a string s, count the number of non-empty (contiguous) substrings that have the same number of 0’s and 1’s, and all the 0’s and all the 1’s in these substrings are grouped consecutively.Substr

vickyruirui的博客 1138

AGV、RGV、四向车openTCS调度系统(三)车辆适配器解读,封装自己的适配器

AGV、RGV、四向车调度。理解适配器的整体作用,以及如何使用官方例子改造自己的适配器,

要这头发有何用 3613

leetcode题解-696. Count Binary Substrings

从今天开始刷字符串部分的题目,这部分我会记录每一题的简短思路,方便最后写一个总结性的博客。接下来先看一下第一道题696. Count Binary Substrings:题目:Give a string s, count the number of non-empty (contiguous) substrings that have the same number of 0's and 1's,

呜呜哈的博客 3753

PTA 学生信息的那些操作:添加记录(结构体)

这是河南工业大学自主命题的一道基础题,题目如下: 有一学生成绩表,包括学号、姓名、3门课程成绩。已知该成绩表按学号升序排序。请编程实现,添加一个新的学生信息,且使成绩表仍按学号有序;若待添加的学号与已有学号重复,则输出错误信息,拒绝添加。 输入格式: 首先输入一个整数n(1<=n<=100),表示学生人数; 然后输入n行,每行包含一个学生的信息:学号(12位)、姓名(不含空格且不超过20位),以及3个整数,表示3门课成绩,数据之间用空格隔开。 最后一行输入一个待添加的学生信息,包括学号

weixin_63617665的博客 3156

Count Binary Substrings问题及解法

696. Count Binary Substrings LeetCode

刘天的博客 917

告别网络卡顿!保姆级教程:用国内镜像源5分钟搞定ESP32开发环境(Arduino IDE)

本文提供了一份保姆级教程,教你如何利用国内镜像源在5分钟内快速搭建ESP32开发环境(Arduino IDE),告别网络卡顿问题。教程详细介绍了镜像源配置、开发板安装、测试程序烧录等步骤,并包含与巴法云对接的实战案例,帮助开发者高效完成物联网项目。

weixin_42536058的博客 593

简谈基于FPGA的千兆以太网设计

简谈基于FPGA的千兆以太网设计 今天给大侠带来简谈基于FPGA的千兆以太网设计,话不多说,上货。 今天我们来简单的聊一聊以太网,以太网在FPGA学习中属于比较高级的内容了,有些大侠肯定会感觉以太网学习起来非常不容易。其实,我可以告诉大家,前期学习的基础打扎实了,后期的学习也没那么难。总之就是说难没那么难,说容易也不是那么容易。那么,言归正传,下面让我们一起来聊一聊以太网的学习。 说起以太网,大家可能就会想到百兆以太网、千兆以太网以及万兆以太网等等。局域以太网从10M开始发展,经历几多的变迁,发展到现

3622

math sub Java_LeetCode算法题-Count Binary Substrings(Java实现)

这是悦乐书的第293次更新,第311篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第161题(顺位题号是696)。给定一个字符串s,计算具有相同数字0和1的非空且连续子串的数量,并且这些子串中的所有0和所有1都是连续的。重复出现的子串也计算在内。例如:输入:“00110011”输出:6说明:有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”...

weixin_29032337的博客 116

蓝牙学习笔记之SMP协议(十四)

目录 写在前面 SM规范简述 安全管理器 加密工具 配对流程 安全属性 IO功能 加密密钥大小 配对算法 低功耗蓝牙安全 密钥和值的定义 分发密钥的生成 密钥分配 安全管理器会话协议 介绍 ​​​​​​​命令格式 写在前面 安全规范协议,主要是描述LE控制器设备配对、认证、加密等过程进行规定,同时也对相关算法进行了说明。 低功耗蓝牙的安全管理经历了几个阶段,L...

在云巅的博客 3663

LeetCode 696 Count Binary Substrings (模拟)

Give a string s, count the number of non-empty (contiguous) substrings that have the same number of 0's and 1's, and all the 0's and all the 1's in these substrings are grouped consecutively. Substri...

Tc的专栏 380

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

LeetCode696. Count Binary Substrings

0、1组子串

grllery的博客 424

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

leetcode-696. Count Binary Substrings

696. Count Binary Substrings Give a string s, count the number of non-empty (contiguous) substrings that have the same number of 0's and 1's, and all the 0's and all the 1's in these substrings

link98 855

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Leetcode——696. Count Binary Substrings

题目原址 https://leetcode.com/problems/count-binary-substrings/description/ 题目描述 Give a string s, count the number of non-empty (contiguous) substrings that have the same number of 0’s and 1’s, and all...

想当厨子的程序媛 401

LeetCode-696. Count Binary Substrings [C++][Java]

Give a binary strings, return the number of non-empty substrings that have the same number of0's and1's, and all the0's and all the1's in these substrings are grouped consecutively. Substrings that occur multiple times are counted the number of times.

贫道绝缘子的博客 558

696. Count Binary Substrings - LeetCode

为什么80%的码农都做不了架构师?>>> ...

weixin_33812433的博客 109

LeetCode - Easy - 696. Count Binary Substrings

Topic String Description https://leetcode.com/problems/count-binary-substrings/ Give a string s, count the number of non-empty (contiguous) substrings that have the same number of 0’s and 1’s, and all the 0’s and all the 1’s in these substrings are group

KISS 200

【Leetcode】696. Count Binary Substrings

题目地址: https://leetcode.com/problems/count-binary-substrings/ 给定一个长nnn的0−10-10−1字符串sss,问其中有多少个非空子串,其000和111的个数相等,并且000和111不交错出现(即000之间没有111,111之间也没有000)。 遍历sss,记录上一个数字最长连续出现的次数aaa,然后算当前数字最长连续出现的次数bbb,那么能得到的满足条件的子串就是min⁡{a,b}\min\{a,b\}min{a,b}。所以我们只需要交替计算aa

数学、算法爱好者的博客 342

从F1到H7:如何像老手一样根据项目需求快速锁定合适的STM32型号?

本文为嵌入式工程师提供STM32选型实战指南,详细解析芯片命名规则,帮助根据项目需求快速锁定合适型号。通过性能需求矩阵、外设需求清单和成本敏感度评估,实现精准选型,避免资源浪费和性能不足。涵盖物联网终端、电机控制和图形界面等典型应用场景的选型策略。

weixin_33738982的博客 400

[leetcode] Count Binary Substrings

Give a strings, count the number of non-empty (contiguous) substrings that have the same number of 0's and 1's, and all the 0's and all the 1's in these substrings are grouped consecutively. Subst...

weixin_30532987的博客 106

Leetcode 696 Count Binary Substrings

Leetcode 696 Count Binary Substrings

lylyy_666的博客 350

LeetCode-Count Binary Substrings

LeetCode Java Count Binary Substrings

坟头草一米七五 285

LeetCode Count Binary Substrings

原题链接在这里:https://leetcode.com/problems/count-binary-substrings/description/ 题目: Give a strings, count the number of non-empty (contiguous) substrings that have the same number of 0's and 1's, and al...

weixin_30814223的博客 127
上一篇: LeetCode算法题-Binary Number with Alternating Bits(Java实现)
下一篇: LeetCode算法题-Degree of an Array(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值