2609. 最长平衡子字符串

news2025/1/11 22:50:27


2609. 最长平衡子字符串
难度: 简单
来源: 每日一题 2023.11.08

给你一个仅由 01 组成的二进制字符串 s

如果子字符串中 所有的 0 都在 1 之前 且其中 0 的数量等于 1 的数量,则认为 s 的这个子字符串是平衡子字符串。请注意,空子字符串也视作平衡子字符串。

返回 s 中最长的平衡子字符串长度。

子字符串是字符串中的一个连续字符序列。

示例 1:

输入:s = "01000111"
输出:6
解释:最长的平衡子字符串是 "000111" ,长度为 6 。

示例 2:

输入:s = "00111"
输出:4
解释:最长的平衡子字符串是 "0011" ,长度为  4 。

示例 3:

输入:s = "111"
输出:0
解释:除了空子字符串之外不存在其他平衡子字符串,所以答案为 0 。

提示:

  • 1 <= s.length <= 50
  • '0' <= s[i] <= '1'
class Solution {
    public int findTheLongestBalancedSubstring(String s) {

    }
}

分析与题解

  • 计数模拟法

    这个题其实我们只需要知道, 什么时候启动下一个子串什么时候比较最终结果就好.

    为了满足题意, 停止条件只会有一个, 那就是前面有 n 个 1 , 当前位置数字是 0, 就要停止了, 这时候判断子串的长度. 输出到最终结果中, 同时这时候也是新一轮的开始.

    由于前面的 10 的个数不一样, 例如一个这样的数字 001110, 在最后一个 0 满足了条件停止了, 所以, 我们得到了 00111 那么平衡子字符串应该是 0011, 这时候我们只需要取前面子串的 01 数量较少的个数乘以2就是平衡子字符串的长度.

    接下来, 我们看一下解题过程. 首页我们定义两个常量 zeroone 用来存储子串的 01 的数量情况.

    int zero = 0, one = 0;
    

    然后, 我们进行遍历, 先判断当前是 0 的情况, 当 one > 0 也就是前面子串有 1 就进入停止逻辑. 停止逻辑中除了要输出maxLength, 还要清空 zeroone, 来为下一次子串判断做准备.

    if (s.charAt(i) == '0') {
        if (one != 0) {
            // 有1 停止了
            // 找两者中较小的值, 然后乘以2与最终结果做比较
            int minCount = Math.min(zero, one);
            maxLength = Math.max(maxLength, minCount * 2);
            // 清空数据
            zero = 0;
            one = 0;
            // 再进行下一轮
        }
        zero++;
    } 
    

    对于 当前下标对应数字是 1 的情况, 我们只需要判断前面有 0, 我们就对 one 进行 +1 操作.

    if (zero > 0) {
        one++;
    }
    

    当然了, 在遍历完成之后, 最后一个子串肯定没法在循环中判断, 我们直接在外部再进行一次判断即可.

    // 遍历完成,判断最后的一组数据情况
    if (zero > 0 && one > 0) {
        int minCount = Math.min(zero, one);
        maxLength = Math.max(maxLength, minCount * 2);
    }
    

    那么接下来, 我们就看一下整体的题解过程.

    class Solution {
        public int findTheLongestBalancedSubstring(String s) {
            int zero = 0, one = 0;
            int maxLength = 0;
            for(int i = 0; i < s.length(); i++) {
                if (s.charAt(i) == '0') {
                    if (one != 0) {
                        // 有1 停止了
                        // 找两者中较小的值, 然后乘以2与最终结果做比较
                        int minCount = Math.min(zero, one);
                        maxLength = Math.max(maxLength, minCount * 2);
                        // 清空数据
                        zero = 0;
                        one = 0;
                        // 再进行下一轮
                    }
                    zero++;
                } else {
                    if (zero > 0) {
                        one++;
                    }
                }
            }
            // 遍历完成,判断最后的一组数据情况
            if (zero > 0 && one > 0) {
                int minCount = Math.min(zero, one);
                maxLength = Math.max(maxLength, minCount * 2);
            }
            return maxLength;
        }
    }
    

    复杂度分析:

    • 时间复杂度: O(n), 与字符串数组长度相关的时间复杂度.
    • 空间复杂度: O(1), 常量基本的时间复杂度.

    结果如下所示.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1203577.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】树与二叉树(十四):二叉树的基础操作:查找给定结点的父亲(算法Father )

文章目录 5.2.1 二叉树二叉树性质引理5.1&#xff1a;二叉树中层数为i的结点至多有 2 i 2^i 2i个&#xff0c;其中 i ≥ 0 i \geq 0 i≥0。引理5.2&#xff1a;高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点&#xff0c;其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…

C# Spire.Pdf将PDF文件转换为Word文件

一.开发框架&#xff1a; .NetCore6.0 工具&#xff1a;Visual Studio 2022 二.思路&#xff1a; 1.界面上传PDF文件&#xff0c;并保存 2.PDF文件转换为Word文件并保存 3.使用SHA256Hash判断文件是否已经转换过了&#xff0c;转换过了的话&#xff0c;就返回原先转换过的文…

数据——最为直接的答案

身处于这样一个数字化快速发展、竞争强烈的时代&#xff0c;不管是企业还是个人&#xff0c;大家都需要及时获取前沿动态信息&#xff0c;密切关注市场的变化。但是&#xff0c;在不计其数的企业中&#xff0c;到底行业top 是哪些企业引领潮流&#xff1f; 只有数据能告诉你最…

一款免费好用的制作电子杂志网站,发现新大陆~

你是不是也厌倦了传统纸质杂志的限制&#xff0c;想要尝试一种全新的阅读体验&#xff1f;那么&#xff0c;今天我要向你推荐的这款免费好用的制作电子杂志网站&#xff0c;绝对能让你眼前一亮&#xff01; 这款网站就是FLBOOK在线制作电子杂志平台&#xff0c;并且界面简洁、操…

设计模式之模版方法(TemplateMethod)

模版方法 钩子函数 回调函数 在父类里面有一个模版方法&#xff0c;在这个方法里面调用了op1&#xff0c;op2&#xff0c;op3… 在子类里面如果想要改变父类的op1和op2 只需要重写op1和op2&#xff0c;那么这个重写之后的方法&#xff0c;可以在父类里面直接调用的到 例子: J…

LabVIEW中NIPackageManager功能介绍

LabVIEW中PackageManager功能介绍 使用NIPackage Manager可安装、更新、修复和删除NI软件。 安装NI软件 使用PackageManager浏览和安装NI软件。 1. 在浏览产品选项卡上&#xff0c;单击产品类别以显示该类别中的可用产品。 2. 选择要安装的产品&#xff0c;然后单击…

20 个好用的一行 Java代码

今天分享给大家20个 令人惊叹的 Java一行代码&#xff0c;让你们的工作更轻松。一起来看看吧&#xff01; 1. 获取浏览器 Cookie 的值 使用document.cookie 来获取 Cookie 的值。 2. 将 RGB 转换为十六进制 3. 复制到剪贴板 使用 navigator.clipboard.writeText 轻松将任何文本…

Cesium 点线面实体

1.点 const point viewer.entities.add({ id: point, position: Cesium.Cartesian3.fromDegrees(113, 30), point: { pixelSize: 20, //像素 color: Cesium.Color.DEEPPINK, outlineColor: Cesium.Color.fromCssColorString(#fff), outlineWidth: 2, // 像素 }, }); 2.图标标注…

医院等级评审,离不开医院不良事件报告系统

医院不良事件报告系统全套源码 不良事件管理系统源码 不良事件上报系统对事件的报告、处置、跟踪、评价、分析、改进、学习等进行了综合管理&#xff0c;通过双向互评机制实现临床科室与职能部门之间的进一步互动&#xff0c;加强不良事件报告处置过程中的信息互通能力。 围绕…

Sonatype Nexus部署docker安装nexus3

Nexus是一个强大的Maven仓库管理器&#xff0c;它极大地简化了自己内部仓库的维护和外部仓库的访问。 1、查看可用的 Nexus3版本 可以通过 Sort by 查看其他版本的 nexus3&#xff0c;默认是最新版本 sonatype/nexus3:latest。 https://hub.docker.com/r/sonatype/nexus3/tags…

猫罐头如何选择?最受欢迎的5款猫罐头推荐!新手养猫速看!

对于一个刚入门的养猫新手来说&#xff0c;面对市面上琳琅满目的猫罐头选择确实让人头大。我们总想选到营养价值高的罐头&#xff0c;但又怕猫咪不喜欢吃&#xff0c;还担心选到不安全的产品。 作为家里有5只猫猫的铲屎官来说&#xff0c;养猫的这几年可以说是血泪史了&#x…

为什么你应该学习Go语言?

终于等到你&#xff01;Go语言——让你用写Python代码的开发效率编写C语言代码。 一、为什么互联网世界需要Go语言 世界上已经有太多太多的编程语言了&#xff0c;为什么又出来一个Go语言&#xff1f; 硬件限制&#xff1a;摩尔定律已然失效 摩尔定律&#xff1a;当价格不变…

LeetCode题94,44,145,二叉树的前中后序遍历,非递归

注意&#xff1a;解题都要用到栈 一、前序遍历 题目要求 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[…

LiveMedia视频监控汇聚管理平台功能中的CS客户端

平台具备独立的CS客户端可供客户使用&#xff0c;包含实时播放、监视组轮询、云镜控制、语音对讲、录像回放、报警查询、报警联动等。 实时视频 客户端支持单画面多画面显示&#xff0c;用户可选择任意一路或多路视频观看&#xff0c;视频窗口数量 1、3、6、8、9 直至 64 个可…

安装显卡驱动、安装cuda toolkit、安装cudnn

nvidia-smi查看&#xff0c;CUDA可以向下兼容&#xff0c;以我为例&#xff0c;可以安装12.0以下的版本&#xff1a; cuda toolkit https://developer.nvidia.com/cuda-toolkit-archive 如果 你前面没有安装vs&#xff0c;直接安装的这个&#xff0c;需要把CUDA里面的 Visua…

LLM大语言模型(典型ChatGPT)入门指南

文章目录 一、基础概念学习篇1.1 langchain视频学习笔记1.2 Finetune LLM视频学习笔记 二、实践篇2.1 预先下载模型&#xff1a;2.2 LangChain2.3 Colab demo2.3 text-generation-webui 三、国内项目实践langchain-chatchat 一、基础概念学习篇 1.1 langchain视频学习笔记 lan…

《005.SpringBoot之仓库管理系统》【有文档】

《005.SpringBoot之仓库管理系统》【有文档】 项目简介 [1]本系统涉及到的技术主要如下&#xff1a; 推荐环境配置&#xff1a;IDEA jdk1.8 Maven MySQL8.0 技术栈; 后台&#xff1a;SpringBootMybatisPlus; 前端&#xff1a;thymeleaf; [2]功能模块展示&#xff1a; 1.基础…

海康威视(iVMS)综合安防系统任意文件上传漏洞复现 [附POC]

文章目录 海康威视&#xff08;iVMS&#xff09;综合安防系统任意文件上传漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 海康威视&#xff08;iVMS&#xff09;综合安防系统任意文件上传漏洞复…

详解JDBC

JDBC简介 概念: jdbc就是使用java语言操作关系型数据库的一套API 全称 : (Java DataBase Connectivity) Java数据库连接 本质: 官方(sun公司)定义的一套操作所有关系型数据库的规则&#xff0c;即接口&#xff1b; 各个数据库厂商实现这套接口&#xff0c;提供数据库驱动j…

睿登RD6012P数控可调电源简单开箱评测

睿登RD6012P恒压恒流数控直流可调电源简单开箱评测&#xff0c;测试了一下 空载功耗和效率测试、恒流输出精度和电流回读精度测试、恒压输出精度和电压回读精度测试、输出纹波&#xff0c;还有简单分析了一下用到的芯片&#xff08;背面可看到的芯片&#xff0c;没有拆开看里面…