当前位置:网站首页>【LeetCode】761. 特殊的二进制序列
【LeetCode】761. 特殊的二进制序列
2022-08-08 13:55:00 【pass night】
题目
特殊的二进制序列是具有以下两个性质的二进制序列:
- 0 的数量与 1 的数量相等。
- 二进制序列的每一个前缀码中 1 的数量要大于等于 0 的数量。
给定一个特殊的二进制序列 S
,以字符串形式表示。定义一个操作 为首先选择 S
的两个连续且非空的特殊的子串,然后将它们交换。(两个子串为连续的当且仅当第一个子串的最后一个字符恰好为第二个子串的第一个字符的前一个字符。)
在任意次数的操作之后,交换后的字符串按照字典序排列的最大的结果是什么?
示例 1:
输入: S = "11011000"
输出: "11100100"
解释:
将子串 "10" (在S[1]出现) 和 "1100" (在S[3]出现)进行交换。
这是在进行若干次操作后按字典序排列最大的结果。
说明:
S
的长度不超过50
。S
保证为一个满足上述定义的特殊 的二进制序列。
思路
- 因为只能对连续且非空的特殊子串操作,所以声明一个变量在遍历过程中判断当前区间内是否为连续子串
- 因为0,1数量相等,且前缀中1的数量大于0,所以特殊字串由1开头,0结尾
- 不断递归所见的特殊字串,每次都求取其子串的最大字典序值,拼接后依旧是最大字典序
- 尽管只有两个相邻字符能够交换,但根据冒泡排序的原理,依旧可以获得升序列
- 上述的升序列即位所求值
代码
class Solution:
def makeLargestSpecial(self, s: str) -> str:
if len(s) <= 2:
return s
count = left = 0
subs = list()
for i, c in enumerate(s):
if c == "1": count +=1
else:
count -= 1
if count == 0:
subs.append("1" + self.makeLargestSpecial(s[left+1:i]) + "0")
left = i+1
subs.sort(reverse=True)
return "".join(subs)
复杂度
- 时间复杂度: O ( n 2 ) O(n^2) O(n2)
- 空间复杂度: O ( n ) O(n) O(n)
边栏推荐
猜你喜欢
张一鸣挺进生育大业
【JS高级】ES5标准规范之严格模式下的保护对象_09
《预训练周刊》第56期:长文本理解、即时问答、掩码自监督
【软考 系统架构设计师】软件架构设计⑥ 软件产品线
Verilog HDL Bits training 09 grammar foundation
译文推荐|深入解析 BookKeeper 协议模型与验证
Verilog语法基础HDL Bits训练 09
Flink1.15源码阅读——StreamGraph流图
Tsinghua | GLM-130B: An Open Bilingual Pre-training Model
TS+Hooks二次封装antd Modal,实现可拖拽
随机推荐
Kotlin系列之let、with、run、apply、also函数的使用
6.【opencv鼠标回调事件】
Time to update your tech arsenal in 2020: Asgi vs Wsgi (FastAPI vs Flask)
R语言使用位置索引筛选dataframe的数据列:筛选单个数据列、筛选多个数据列、列表表达式方法、矩阵式下标方法
干货满满,中科院信工所于静新课帮你get学术研究与论文写作技能
基于ModelArts的StyleGAN3生成高清图丨【华为云至简致远】
【低代码】1405- 浅谈低代码平台远程组件加载方案
qtwebapp库的编译及简单使用
【小码匠自习室】CSP-J/S复试高分秘诀经验分享
【小码匠自习室】ABC084 - D:喜欢这样的大神,超有才华
华为云会议初体验【华为云至简致远】
难产的“第一股”:中式快餐之困
PostgreSQL 用户与schema有什么区别?
KMP Media Group South Africa implemented a DMS (Document Management System) to digitize the process, employees can again focus on their actual tasks, providing efficiency
Tensorflow and Keras for machine learning, deep learning
暗恋云匹配匿名交友聊天系统开发
基于QWebassembly的一个数据库监测工具
初窥门径代码起手,Go lang1.18入门精炼教程,由白丁入鸿儒,首次运行golang程序EP01
更改默认打开应用程序设置
项目动态|Apache Pulsar 2.10.1 版本介绍