当前位置:网站首页>【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)
边栏推荐
猜你喜欢
难产的“第一股”:中式快餐之困
Implementation of FIR filter based on FPGA (1) - using fir1 function design
Full of dry goods, Yu Jingxin class of the Institute of Information Technology, Chinese Academy of Sciences will help you get academic research and thesis writing skills
今日睡眠质量记录83分
你是什么时候对深度学习失去信心的?
Review: What is the pre-approval of autumn recruitment?What is an ordinary autumn move?It's all recruitment, why do you need to set these two recruitment time periods?
window停掉指定端口的进程
年初离职,学习半年源码,终于拿到了蚂蚁Offer,分享面试过程
活动报名| StreamNative 受邀参与 ITPUB 在线技术沙龙
HackTheBox | Previse
随机推荐
leetcode 155. Min Stack最小栈(中等)
树上距离为1子集修改
难产的“第一股”:中式快餐之困
更改默认打开应用程序设置
医学图像数据增强-重采样itk
机器学习+深度学习笔记(持续更新~)
Tensorflow与Keras进行机器学习、深度学习
qtwebapp库的编译及简单使用
KD-SCFNet: More Accurate and Efficient Salient Object Detection Through Knowledge Distillation (ECCV2022)
「复盘」面试BAMT回来整理398道高频面试题,助你拿高薪offer
【Redis】redis安装与客户端redis-cli的使用(批量操作)
年初离职,学习半年源码,终于拿到了蚂蚁Offer,分享面试过程
【JS高级】ES5标准规范之严格模式下的保护对象_09
OpenInfra Days China 2022 |StreamNative 翟佳、刘德志受邀分享
Code Casual Recording Notes_Dynamic Programming_322 Change Exchange
兔起鹘落全端涵盖,Go lang1.18入门精炼教程,由白丁入鸿儒,全平台(Sublime 4)Go lang开发环境搭建EP00
路由器——交换机——网络交换机:区别
【小码匠自习室】ABC084 - D:喜欢这样的大神,超有才华
PostgreSQL 用户与schema有什么区别?
idea增加左右箭头