
给你一个二进制字符串 binary ,它仅有 0 或者 1 组成。你可以使用下面的操作任意次对它进行修改:
"00" ,你可以用 "10" 将其替换。
比方说, "00010" -> "10010""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 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
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++