1702. 修改后的最大二进制字符串Java
文章发布较早,内容可能过时,阅读注意甄别。
# 题目
给你一个二进制字符串 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 <= 105
- binary 仅包含 '0' 和 '1' 。
# 思路
// 1.字符串首的1不动
// 2.统计0的个数n,添加n-1个1
// 3.添加一个0
// 4.之后顺序补充1
# 解法
// 1.字符串首的1不动
// 2.统计0的个数n,添加n-1个1
// 3.添加一个0
// 4.之后顺序补充1
class Solution {
public String maximumBinaryString(String binary) {
StringBuilder sb = new StringBuilder();
int index = 0;
for(; index<binary.length(); index++){
if(binary.charAt(index)=='1') sb.append("1");
else break;
}
int countZero = 0;
for(; index<binary.length(); index++){
if(binary.charAt(index)=='0') countZero++;
}
for(int i=1; i<countZero; i++){
sb.append("1");
}
if(countZero>0) sb.append("0");
for(int i=sb.length(); i<binary.length(); i++){
sb.append("1");
}
return sb.toString();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 总结
- 分析出几种情况,然后分别对各个情况实现


