LeetCode in Kotlin

1702. Maximum Binary String After Change

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:

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:

Solution

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)
    }
}