【Leetcode】1702. 修改后的最大二进制字符串

文章目录

  • 题目
  • 思路
  • 代码
  • 复杂度分析
    • 时间复杂度
    • 空间复杂度
  • 结果
  • 总结

题目

题目链接🔗
给你一个二进制字符串 b i n a r y binary binary ,它仅有 0 0 0 或者 1 1 1 组成。你可以使用下面的操作任意次对它进行修改:

操作 1 :如果二进制串包含子字符串 " 00 " "00" "00" ,你可以用 " 10 " "10" "10" 将其替换。
比方说, " 00010 " → " 10010 " "00010" \rightarrow "10010" "00010""10010"
操作 2 :如果二进制串包含子字符串 “10” ,你可以用 “01” 将其替换。
比方说, " 00010 " → " 00001 " "00010" \rightarrow "00001" "00010""00001"
请你返回执行上述操作任意次以后能得到的 最大二进制字符串 。如果二进制字符串 x x x 对应的十进制数字大于二进制字符串 y y y 对应的十进制数字,那么我们称二进制字符串 x x x 大于二进制字符串 y y y

示例 1

输入:binary = “000110”
输出:“111011”
解释:一个可行的转换为:
“000110” -> “000101
000101” -> “100101”
“100101” -> “110101”
“110101” -> “110011”
“110011” -> “111011”

示例 2
输入:binary = “01”
输出:“01”
解释:“01” 没办法进行任何转换。

提示

  • 1 ≤ b i n a r y . l e n g t h ≤ 1 0 5 1 \leq binary.length \leq 10^5 1binary.length105
  • b i n a r y binary binary 仅包含 ′ 0 ′ '0' 0 ′ 1 ′ '1' 1

思路

要求通过操作将给定的二进制字符串转换为最大的二进制字符串。根据题目中的提示,可以利用贪心的思想来解决这个问题。

首先观察到在最终的答案中,不会出现连续的 0 0 0,比如说 " 00 " "00" "00"这种情况,因为可以通过操作 1 1 1 将其变为更大的字符串。所以我们可以先将所有的连续的 00 00 00 替换为 10 10 10

其次,最终答案至多包含一个 0 0 0。如果原始字符串中存在 010 010 010,我们可以将最右边的 000 000 000 移动到最左边,然后将其变为 101 101 101。这样可以保证得到的字符串更大。

最后,如果原始字符串中全是 111 111 111,则无需进行任何操作,直接返回原字符串即可。

代码

class Solution {
public:string maximumBinaryString(string binary) {int len=binary.size();int lin=0;int linwei=-1;for(int i=0;i<len;++i){if(binary[i]=='0'){lin++;if(linwei==-1)linwei=i;}}string ans;for(int i=0;i<linwei+lin-1;++i)ans+='1';if(lin)ans+='0';else linwei=0;for(int i=linwei+lin;i<len;++i)ans+='1';return ans;}
};

在这里插入图片描述

复杂度分析

时间复杂度

O ( n ) O(n) O(n)

空间复杂度

O ( 1 ) O(1) O(1)

结果

总结

利用贪心的思想,通过统计连续0的数量和位置,并对字符串进行操作,使得得到的字符串尽可能大。通过遍历一次字符串,即可得到最终的结果。

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

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

相关文章

深入探索长短期记忆网络(LSTM)

目录 1. 引言 2. LSTM的原理 2.1 循环神经网络&#xff08;RNN&#xff09;的问题 2.2 LSTM的解决方案 2.3 主要组件 3. LSTM的结构 4. LSTM的训练方法 4.1 损失函数 4.2 参数优化 4.3 初始化 5. LSTM的应用场景 5.1 自然语言处理&#xff08;NLP&#xff09; 5.2…

Golang(一):基础、数组、map、struct

目录 hello world 变量 常量&#xff0c;iota 函数 init函数和导包过程 指针 defer 数组和动态数组 固定长度数组 遍历数组 动态数组 len 和 cap 截取 切片的追加 map 四种声明方式 遍历map 删除 查看键是否存在 结构体 声明 作为形参 方法 封装 继承…

[入门到放弃]设计模式-笔记

模块化设计 20240448 模块不包含数据&#xff0c;通过实例的指针&#xff0c;实现对实例的操作&#xff1b;唯一包含的数据是用于管理这些模块的侵入式链表模块只负责更具定义的数据结构&#xff0c;执行对应的逻辑&#xff0c;实现不同实例的功能&#xff1b; 参考资料 使用…

【热门话题】常见分类算法解析

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 常见分类算法解析1. 逻辑回归&#xff08;Logistic Regression&#xff09;2. 朴…

4.Godot图片素材的获取和编辑

游戏开发中经常遇到图片素材的需求 1. 图片素材的准备 术语&#xff1a;Sprite 精灵&#xff0c;游戏开发中指一张图片来源不明的图片&#xff0c;切勿在商业用途使用&#xff0c;以免引起版权风险。 1. 在学习阶段&#xff0c;可以百度或者从一些资源网站获取&#xff0c;这…

ViT-DeiT:用于乳腺癌组织病理图像分类的集成模型

两种预训练Vision Transformer模型的集成模型&#xff0c;即Vision Transformer和数据高效视觉Transformer&#xff08;Data-Efficient Image Transformer&#xff09;。此集成模型是一种软投票模型。 近年来&#xff0c;乳腺癌的分类研究主要集中在超声图像分类、活检数据分类…

QT常用控件

常用控件 控件概述QWidget 核⼼属性核⼼属性概览enabledgeometrywindowTitlewindowIconwindowOpacitycursorfonttoolTipfocusPolicystyleSheet 按钮类控件Push ButtonRadio ButtionCheck Box 显⽰类控件LabelLCD NumberProgressBarCalendar Widget 输⼊类控件Line EditText Edi…

Java 标识符命名规则

小驼峰命名法&#xff1a;方法、变量 规范 1&#xff1a;标识符是一个单词的时候&#xff0c;全部小写。如&#xff1a;name 规范 2&#xff1a;标识符由多个单词组成的时候&#xff0c;第一个单词首字母小写&#xff0c;其他单词首字母大写。如&#xff1a;firstName 大驼峰…

Python中的args和kwargs是什么

左手编程&#xff0c;右手年华。大家好&#xff0c;我是一点&#xff0c;关注我&#xff0c;带你走入编程的世界。 公众号&#xff1a;一点sir&#xff0c;关注领取python编程资料 我们在开发python的时候经常会碰见这两个参数&#xff0c;*args和**kwargs是Python中的两个特殊…

AI领域的最新动态:大型语言模型的崛起、AI芯片竞争与创新应用

AI领域的最新动态&#xff1a;大型语言模型的崛起、AI芯片竞争与创新应 在最近的AI新闻中&#xff0c;有几个重要的发展值得关注&#xff1a; 1. **大型语言模型的发布和更新**&#xff1a; - Google在其Google Cloud Next活动上宣布&#xff0c;Gemini 1.5现已在180多个国家/…

(学习日记)2024.04.15:UCOSIII第四十三节:任务消息队列

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

# 达梦sql查询 Sql 优化

达梦sql查询 Sql 优化 文章目录 达梦sql查询 Sql 优化注意点测试数据单表查询 Sort 语句优化优化过程 多表关联SORT 优化函数索引的使用 注意点 关于优化过程中工具的选用&#xff0c;推荐使用自带的DM Manage&#xff0c;其它工具在查看执行计划等时候不明确在执行计划中命中…

MySQL 主从复制部署(8.0)

什么是主从数据库 主从数据库是一种数据库架构模式&#xff0c;通常用于提高数据库的性能、可用性和可伸缩性。 它包括两种类型的数据库服务器&#xff1a; 1&#xff09;主数据库&#xff08;Master&#xff09;&#xff1a;主数据库是读写数据的主要数据库服务器。所有写操…

前端小技巧之轮播图

文章目录 功能htmlcssjavaScript图片 设置了一点小难度&#xff0c;不理解的话&#xff0c;是不能套用的哦&#xff01;&#xff01;&#xff01; &#xff08;下方的圆圈与图片数量不统一&#xff0c;而且宽度是固定的&#xff09; 下次写一些直接套用的&#xff0c;不整这些麻…

SpringBoot配置优先级

配置优先级排序&#xff08;从高到低&#xff09; 1&#xff09;命令行参数 2&#xff09;java系统属性 3&#xff09;application.properties 4&#xff09;application.yaml 5&#xff09;application.ymlSpringBoot的系统属性配置和命令行参数配置 1、cmd端进行配置 1&am…

子传父vue/react

vue子传父&#xff1a;很多都是结合defineEmit来实现的&#xff0c;这里通过给子组件传递函数&#xff0c;子组件调用传递下来的函数实现传值。 父亲&#xff1a; <template><div>father<Demo :clickChild"clickFather" msg"32434">We…

边缘计算网关究竟是什么呢?它又有什么作用呢?-天拓四方

在数字化时代&#xff0c;信息的传输与处理变得愈发重要&#xff0c;而其中的关键节点之一便是边缘计算网关。这一先进的网络设备&#xff0c;不仅扩展了云端功能至本地边缘设备&#xff0c;还使得边缘设备能够自主、快速地响应本地事件&#xff0c;提供了低延时、低成本、隐私…

基本的数据类型在16位、32位和64位机上所占的字节大小

1、目前常用的机器都是32位和64位的&#xff0c;但是有时候会考虑16位机。总结一下在三种位数下常用的数据类型所占的字节大小。 数据类型16位(byte)32位(byte)64位(byte)取值范围char111-128 ~ 127unsigned char1110 ~ 255short int / short222-32768~32767unsigned short222…

Linux命令学习—linux 下的用户和组的管理(下)

1.2、组的管理 1.2.1、组相关文件介绍 ①、/etc/group 用户组的特性在系统管理中为系统管理员提供了极大的方便&#xff0c;但安全性也是值得关注的&#xff0c;如某个用户 下有对系统管理有最重要的内容&#xff0c;最好让用户拥有独立的用户组&#xff0c;或者是把用户下的…

Go程序设计语言 学习笔记 第十一章 测试

1949年&#xff0c;EDSAC&#xff08;第一台存储程序计算机&#xff09;的开发者莫里斯威尔克斯在他的实验室楼梯上攀登时突然领悟到一件令人震惊的事情。在《一位计算机先驱的回忆录》中&#xff0c;他回忆道&#xff1a;“我突然完全意识到&#xff0c;我余生中的很大一部分时…