文章目录
- 1. 题目
- 2. 解题
1. 题目
给你一个二进制字符串 binary ,它仅有 0 或者 1 组成。你可以使用下面的操作任意次对它进行修改:
- 操作 1 :如果二进制串包含子字符串
"00"
,你可以用"10"
将其替换。
比方说,"00010" -> "10010"
- 操作 2 :如果二进制串包含子字符串
"10"
,你可以用"01"
将其替换。
比方说,"00010" -> "00001"
请你返回执行上述操作任意次以后能得到的 最大二进制字符串 。
如果二进制字符串 x 对应的十进制数字大于二进制字符串 y 对应的十进制数字,那么我们称二进制字符串 x 大于二进制字符串 y 。
示例 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
class Solution {
public:string maximumBinaryString(string binary) {int one1 = 0, oneall = 0, n = binary.length();bool meetzero = false;//遇到第一次0for(int i = 0; i < n; i++){ if(binary[i] == '1'){oneall++;if(!meetzero)one1++;//左端连续的1}elsemeetzero = 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++
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!