Leetcode-1702-修改后的最大二进制字符串-c++

2024-04-11 12:28

本文主要是介绍Leetcode-1702-修改后的最大二进制字符串-c++,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目详见https://leetcode.cn/problems/maximum-binary-string-after-change/

官方题解

我们从字符串左边第一位开始依次遍历,如果是 1 则不用改变,如果是 0,我们则想办法将其变成 1。 我们会找到下一位出现的 0,利用操作 2 我们可以使得这两个 0 相邻,再使用操作 1 使得 00 变成 10。 我们依次执行这个操作,直到字符串中没有第二个 0,或者达到字符串结尾。

几个关键点

  • 最终整个字符串里面只会有一个0
  • 按照题解的意思,我们找到第一个0之后继续往后找,直到找到第二个0,期间有着几种情况:
    • {第一个0后面立马找到第二个0;}
      • 此时的情况是00,可以直接利用规则1变成10(最大)
    • {第一个0后面隔了几个1,然后才找到第二个0;}
      • 此时第二个0前面一定有1,所以此时对于第二个0他现在的处境是10
      • 此时按照规则2可以将10变成01
      • 我们可以大致看到10这种组合结合规则2可以让我们把0往前"搬"一位,得到01
      • 此时如果第一个0后面隔了几个1,那么我们只需要不断调用规则2就好了,最终一定会得到00
    • {没有找到找到第二个0;}
      • 那此时就是01的情况了,束手无策。

注释代码

class Solution {
public:string maximumBinaryString(string binary) {int n = binary.size();int j = 0;for(int i = 0; i < n; i++){if(binary[i] == '0'){// 在字符串中找到下一个'0'的位置,这个位置要么在i之后,要么在字符串中第一个为'0'的位置while(j <= i || (j < n && binary[j] == '1')){j++;}if(j < n){// 结合上面几个关键点中的第二个关键点的第二种情况,// 我们实际上是吧第二个0搬到了第一个0后面凑出00,// 然后使用规则1将00变成较大的10binary[i] = '1';	// 00变成的10中的1binary[j] = '1';	// 原本的第二个0binary[i + 1] = '0';	// 00变成的10中的0}}}return binary;}
};

笔者也在新手学习期中,所写的内容主要与大家交流学习使用,如有发现任何问题敬请指正!

这篇关于Leetcode-1702-修改后的最大二进制字符串-c++的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/894072

相关文章

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

python中字符串拼接的几种方法及优缺点对比详解

《python中字符串拼接的几种方法及优缺点对比详解》在Python中,字符串拼接是常见的操作,Python提供了多种方法来拼接字符串,每种方法有其优缺点和适用场景,以下是几种常见的字符串拼接方法,需... 目录1. 使用 + 运算符示例:优缺点:2. 使用&nbsjsp;join() 方法示例:优缺点:3

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓

java字符串数字补齐位数详解

《java字符串数字补齐位数详解》:本文主要介绍java字符串数字补齐位数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java字符串数字补齐位数一、使用String.format()方法二、Apache Commons Lang库方法三、Java 11+的St

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa