【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.hqwc.cn/news/618669.html

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

相关文章

解决vue3更新chunk包后,点击页面报错

出现错误 解决思路 试了好多方法&#xff0c;跳了很多坑&#xff0c;router版本对不上&#xff0c;解决方案不实用。最后我直接捕获异常&#xff0c;刷新页面&#xff0c;解决最快最有效。 // vue-rotuer版本 "vue-router": "^4.0.3"解决方案 在router/…

Linux 文件页反向映射

0. 引言 操作系统中与匿名页相对的是文件页&#xff0c;文件页的反向映射对比匿名页的反向映射更为简单。如果还不清楚匿名页反向映射逻辑的&#xff0c;请移步 匿名页反向映射 1. 文件页反向映射数据结构 struct file&#xff1a; 用户进程每open()一次文件&#xff0c;则会生…

前端三件套学习笔记(持更)

目录 1、HTML,CSS,JS区别 2、HTML结构 1、HTML,CSS,JS区别 结构写到 HTML 文件中&#xff0c; 表现写到 CSS 文件中&#xff0c; 行为写到 JavaScript文件中。 2、HTML结构 <!DOCTYPE html> <html><head><title>我的第一个页面</title><…

【系统分析师】需求工程☆

文章目录 0、需求工程概述1、需求的分类2、需求获取3、需求分析3.1 结构化需求分析-SA3.1.1DFD- 数据流图3.1.2 STD-状态转换图3.1.3 ER图-实体联系图 3.2 面向对象需求分析-OOA3.2.1 工具-UML图3.2.2 UML分类3.2.3 用例图 ☆3.2.4 类图 / 对象图 ☆3.2.5 顺序图3.2.6 活动图3.…

科研学习|科研软件——如何使用SmartPLS软件进行结构方程建模

SmartPLS是一种用于结构方程建模&#xff08;SEM&#xff09;的软件&#xff0c;它可以用于定量研究&#xff0c;尤其是在商业和社会科学领域中&#xff0c;如市场研究、管理研究、心理学研究等。 一、准备数据 在使用SmartPLS之前&#xff0c;您需要准备一个符合要求的数据集。…

windows 系统下全新下载安装 mysql8.0 数据库(详细)

windows 系统下全新下载安装 mysql8.0 数据库&#xff08;详细&#xff09; 段子手168 1、登录官方网站下载&#xff1a; https://dev.mysql.com/downloads/windows/installer/ 2、下载最新版本&#xff0c;一般可能需要注册登录&#xff0c;下载其他历史版本&#xff0c;请…

transformer在生物基因DNA的应用:DNABERT、DNABERT-2

参考&#xff1a; https://www.youtube.com/watch?vmk-Se29QPBA&t1388s 写明这些训练模型可以最终训练好可以进行DNA特征向量的提取&#xff0c;应用与后续1、DNABERT https://github.com/jerryji1993/DNABERT 主要思路就是把DNA序列当成连续文本数据&#xff0c;直接用…

20240414,类的嵌套,分文件实现

笑死&#xff0c;和宝哥同时生病了 一&#xff0c;封装-案例 1.0 立方体类 #include<iostream>//分别用全局函数和成员函数判定立方体是否相等 using namespace std;class Cube { public:int m_area;int m_vol;int geth(){return m_h;}int getl() { return m_l; }int…

Spark-机器学习(1)什么是机器学习与MLlib算法库的认识

从这一系列开始&#xff0c;我会带着大家一起了解我们的机器学习&#xff0c;了解我们spark机器学习中的MLIib算法库&#xff0c;知道它大概的模型&#xff0c;熟悉并认识它。同时&#xff0c;本篇文章为个人spark免费专栏的系列文章&#xff0c;有兴趣的可以收藏关注一下&…

【电控笔记5】电流环速度环三环参数整定

旋转坐标系下的电压方程,由id和iq计算出ud和uq Lq:q轴电感 Ld:d轴电感 输入是电流,输出是电压? 内嵌式pmsm(ipmsm)模型建立: 其中: λf是转子磁场在定子绕组所产生的磁通链,为一常数,在psms中转子磁场非常稳定几乎不变。 ipmsm转矩方程式: 对永磁同步马达而言,使…

Java代码基础算法练习-拆分一个三位数的个位、十位、百位-2024.04.14

任务描述&#xff1a;输入一个三位数&#xff0c;逆序输出这个三位数的个位、十位、百位对应的数字&#xff0c;用空格分开。 任务要求&#xff1a; 代码示例&#xff1a; package April_2024;import java.util.Scanner; public class a240414 {public static void main(Strin…

三角形最小路径和-java

题目描述: 给定一个三角形 triangle &#xff0c;找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 1 的两个结点。也就是说&#xff0c;如果正位于当前行的下标 i &#xff…