LeetCode
修改后的最大二进制字符串
题目链接:1702. 修改后的最大二进制字符串 - 力扣(LeetCode)
题目描述
给你一个二进制字符串 binary ,它仅有 0 或者 1 组成。你可以使用下面的操作任意次对它进行修改:
-
操作 1 :如果二进制串包含子字符串
"00",你可以用
"10"将其替换。
- 比方说,
"**00**010" -> "**10**010"
- 比方说,
-
操作 2 :如果二进制串包含子字符串
"10",你可以用
"01"将其替换。
- 比方说,
"000**10**" -> "000**01**"
- 比方说,
请你返回执行上述操作任意次以后能得到的 最大二进制字符串 。如果二进制字符串 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 <= 105binary仅包含'0'和'1'。
思路
代码
C++
class Solution {
public:
string maximumBinaryString(string binary) {
int i = binary.find('0');
if(i < 0){
return binary;
}
int cnt1 = count(binary.begin() + i, binary.end(),'1');
return string(binary.size() - 1 - cnt1, '1') + '0' + string(cnt1, '1');
}
};
Java
class Solution {
public String maximumBinaryString(String binary) {
int i = binary.indexOf('0');
if(i < 0){
return binary;
}
char[] s = binary.toCharArray();
int cnt1 = 0;
for(i++; i < s.length; i++){
cnt1 += s[i] - '0';
}
return "1".repeat(s.length - 1 - cnt1) + "0" + "1".repeat(cnt1);
}
}