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 <= 105
binary
仅包含'0'
和'1'
。
思路
https://leetcode.cn/problems/maximum-binary-string-after-change/solutions/2732155/tan-xin-jian-ji-xie-fa-pythonjavacgojsru-szie/?envType=daily-question&envId=2024-04-10
代码
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);
}
}