首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >LeetCode 1702. 修改后的最大二进制字符串(贪心)

LeetCode 1702. 修改后的最大二进制字符串(贪心)

作者头像
Michael阿明
发布2021-02-19 15:04:26
发布2021-02-19 15:04:26
7110
举报

文章目录

1. 题目

给你一个二进制字符串 binary ,它仅有 0 或者 1 组成。你可以使用下面的操作任意次对它进行修改:

  • 操作 1 :如果二进制串包含子字符串 "00" ,你可以用 "10" 将其替换。 比方说, "00010" -> "10010"
  • 操作 2 :如果二进制串包含子字符串 "10" ,你可以用 "01" 将其替换。 比方说, "00010" -> "00001"

请你返回执行上述操作任意次以后能得到的 最大二进制字符串 。 如果二进制字符串 x 对应的十进制数字大于二进制字符串 y 对应的十进制数字,那么我们称二进制字符串 x 大于二进制字符串 y 。

代码语言:javascript
复制
示例 1:
输入:binary = "000110"
输出:"111011"
解释:一个可行的转换为:
"000110" -> "000101" 
"000101" -> "100101" 
"100101" -> "110101" 
"110101" -> "110011" 
"110011" -> "111011"

示例 2:
输入:binary = "01"
输出:"01"
解释:"01" 没办法进行任何转换。
 
提示:
1 <= binary.length <= 10^5
binary 仅包含 '0' 和 '1' 。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-binary-string-after-change 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 左端连续的1不动
  • 后面的1都移动到右边
  • 中间的 n 个0 变成,n-1 个 1 和 1 个 0
代码语言:javascript
复制
class Solution {
public:
    string maximumBinaryString(string binary) {
        int one1 = 0, oneall = 0, n = binary.length();
        bool meetzero = false;//遇到第一次0
        for(int i = 0; i < n; i++)
        {   
            if(binary[i] == '1')
            {
                oneall++;
                if(!meetzero)
                    one1++;//左端连续的1
            }
            else
                meetzero = true;
        }
        return string(one1,'1') // 左端的1不动
            +(n-oneall > 0 ? (string(n-oneall-1,'1')+'0') : "") // 中间的0000变成1110,留一个0
            +string(oneall-one1,'1');//剩余的1全部移到右边
    }
};

192 ms 57.2 MB C++


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/12/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档