Medium
You are given a binary string binary
consisting of only 0
’s or 1
’s. You can apply each of the following operations any number of times:
"00"
, you can replace it with "10"
.
"00010" -> "10010
”"10"
, you can replace it with "01"
.
"00010" -> "00001"
Return the maximum binary string you can obtain after any number of operations. Binary string x
is greater than binary string y
if x
’s decimal representation is greater than y
’s decimal representation.
Example 1:
Input: binary = “000110”
Output: “111011”
Explanation: A valid transformation sequence can be:
“000110” -> “000101”
“000101” -> “100101”
“100101” -> “110101”
“110101” -> “110011”
“110011” -> “111011”
Example 2:
Input: binary = “01”
Output: “01”
Explanation: “01” cannot be transformed any further.
Constraints:
1 <= binary.length <= 105
binary
consist of '0'
and '1'
.class Solution {
fun maximumBinaryString(binary: String): String {
val bs = binary.toCharArray()
var zcount = 0
var pos = -1
for (i in bs.indices.reversed()) {
if (bs[i] == '0') {
bs[i] = '1'
zcount++
pos = i
}
}
if (pos >= 0) {
bs[pos + zcount - 1] = '0'
}
return String(bs)
}
}