【八月】每日一题 - 761. 特殊的二进制序列

简介: 【八月】每日一题 - 761. 特殊的二进制序列

问题描述

特殊的二进制序列是具有以下两个性质的二进制序列:

  • 0 的数量与 1 的数量相等。
  • 二进制序列的每一个前缀码中 1 的数量要大于等于 0 的数量。 给定一个特殊的二进制序列 S,以字符串形式表示。定义一个操作 为首先选择 S 的两个连续且非空的特殊的子串,然后将它们交换。(两个子串为连续的当且仅当第一个子串的最后一个字符恰好为第二个子串的第一个字符的前一个字符。)

在任意次数的操作之后,交换后的字符串按照字典序排列的最大的结果是什么?

示例 1:

输入: S = "11011000" 输出: "11100100" 解释: 将子串 "10" (在S[1]出现) 和 "1100" (在S[3]出现)进行交换。 这是在进行若干次操作后按字典序排列最大的结果。 说明:

  • S 的长度不超过 50。
  • S 保证为一个满足上述定义的特殊 的二进制序列。

链接:leetcode.cn/problems/sp…

解题思路

本题最难的不是如何实现代码,而是如何“看懂”题意。“特殊”的二进制序列看的人一懵一懵的,我们不如换个思路看问题。

  • 将字符1看为左括号,字符0看为右括号。
  • 0 的数量与 1 的数量相等,二进制序列的每一个前缀码中 1 的数量要大于等于 0 的数量。意味着括号都是成对出现的,每一个左括号必须有其能匹配的右括号,并且满足这种“特殊”的二进制序列不会存在类似)(case,因为需要前缀码的1 数量大于 0。

那这样我们的问题就很好解决了,确定一下函数的输出内容,我们需要输出字符串按照字典序排列的最大的结果,其实就是找到其中可交换并且成对的括号进行排序,确保每一对括号内的“特殊”字符是有序的。直接看代码,带着注释会很好理解的。

AC代码

var makeLargestSpecial = function(s) {
    if(s.length <= 2) return s // 递归终止条件
    // 0 - left 保证其中的字典结果是最大的
    let left = 0,cnt = 0
    const result = []
    for(let i = 0; i < s.length; i++){
        if(s[i] === '1'){
            cnt++ // 遇到左括号 + 1
        }else{
            cnt-- 
            if(cnt === 0){ // 匹配的括号结束 如 (( )) ()
                // 这里是抽出中间的子括号,保证在当前( 。。。。)括号内的结果都是字典结果最大的 
                result.push('1' + makeLargestSpecial(s.substring(left + 1,i)) + '0') 
                left = i + 1
            }
        }
    }
    result.sort().reverse()
    return result.join('')
};
``


相关文章
|
Windows
Windows环境CMake安装教程
Windows环境CMake安装教程
1672 0
Windows环境CMake安装教程
VUE3(三十九)自定义loading组件~
VUE3(三十九)自定义loading组件~
611 0
|
11月前
|
机器学习/深度学习 人工智能 算法
《人工智能:洞察材料微观与宏观性能关系的神奇之眼》
在材料科学领域,人工智能正以前所未有的力量精准模拟材料微观结构与宏观性能的复杂关系。通过深度学习算法,AI将微观结构图像转化为数字化特征,揭示出传统方法难以企及的非线性映射规律。海量数据作为基石,使模型能够预测新材料的宏观性能,大幅缩短研发周期并降低成本。这一前沿技术不仅推动了航空航天、电子芯片等领域的技术飞跃,还在半导体、生物医用材料等方面展现出巨大潜力,成为材料科学创新的核心驱动力,引领人类迈向更智能、可持续的未来。
268 5
|
物联网 数据中心
以太网媒体标准详解
【10月更文挑战第16天】
465 0
|
9月前
|
Java 关系型数据库 MySQL
ssm020基于ssm的人才招聘网站(文档+源码)_kaic
网络和科技的进步以及人们生活条件的提高都让计算机技术越来越平民化,深入日常生活中。网络更是成为生活的必备条件,大到国家单位、科研项目,小到大街小巷都充斥着网络的身影。在日常办公中,计算机起到了文字编辑、打印、信息检索、统计等的作用。使用计算机可以使日常繁杂的信息进行科学的加工,使信息变得更加的有序、可利用。计算机技术已成为热门。 正是因为网络、科技、计算机技术使现代人的生活和工作变得便利、轻松,给实体行业带来了巨大的冲击。人才招聘的日常工作也遇到了前所未有的挑战。现如今,对于招聘的管理有很多的局限性,究其原因是因为招聘管理的根本是信息的运动。在新时代的环境下,传统的管理方式不再满足用户的需求,
|
9月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课3 共享存储在线扩容
本文继续探讨穷鬼玩PolarDB RAC一写多读集群系列,介绍如何在线扩容共享存储。实验环境依赖《在Docker容器中用loop设备模拟共享存储》搭建。主要步骤包括:1) 扩容虚拟磁盘;2) 刷新loop设备容量;3) 使用PFS工具进行文件系统扩容;4) 更新数据库实例以识别新空间。通过这些步骤,成功将共享存储从20GB扩容至30GB,并确保所有节点都能使用新的存储空间。
195 1
|
网络协议 安全
QT多线程
本文详细介绍了在Qt中如何正确使用QThread以及信号槽跨线程的使用方式,包括线程的正确退出方法和QObject在不同线程中创建子对象时可能遇到的问题。同时,文章还提供了相关博客和资料的链接,用于进一步学习和参考。
342 3
|
存储 人工智能 关系型数据库
数据库的深度探索:技术演进、应用领域与未来趋势
一、引言 数据库,作为信息技术领域中的关键组件,不仅为数据的存储、检索和管理提供了强有力的支持,而且随着技术的不断发展,其功能和应用领域也在不断扩展
1071 7
|
安全 机器人
Nature子刊:人机融合即将成真!纳米机器人杀死癌细胞,肿瘤生长抑制70%
【7月更文挑战第9天】DNA纳米机器人成功抑制小鼠体内癌细胞生长70%,展示出人机融合治疗癌症的前景。卡罗林斯卡学院科学家利用DNA构造的纳米机器人,识别并选择性攻击癌细胞,其pH敏感设计确保只在肿瘤微环境中激活,减少对健康细胞的影响。尽管需进一步研究优化设计及进行临床试验,这一创新为癌症疗法带来新希望。[链接](https://www.nature.com/articles/s41565-024-01676-4)**
500 1
|
Oracle Java 关系型数据库
实时计算 Flink版产品使用合集之在同步Oracle数据时,需要下载并添加到项目中的jar包主要包括哪些
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
225 13