Medium
You are given a binary string s
. In one second, all occurrences of "01"
are simultaneously replaced with "10"
. This process repeats until no occurrences of "01"
exist.
Return the number of seconds needed to complete this process.
Example 1:
Input: s = “0110101”
Output: 4
Explanation:
After one second, s becomes “1011010”.
After another second, s becomes “1101100”.
After the third second, s becomes “1110100”.
After the fourth second, s becomes “1111000”.
No occurrence of “01” exists any longer, and the process needed 4 seconds to complete, so we return 4.
Example 2:
Input: s = “11100”
Output: 0
Explanation: No occurrence of “01” exists in s, and the processes needed 0 seconds to complete, so we return 0.
Constraints:
1 <= s.length <= 1000
s[i]
is either '0'
or '1'
.Follow up:
Can you solve this problem in O(n) time complexity?
class Solution {
fun secondsToRemoveOccurrences(s: String): Int {
var lastOne = -1
var result = 0
var prevResult: Int
var curResult = 0
var countOne = 0
var countZero = 0
var diff: Int
var pTarget: Int
var pWait: Int
var cTarget: Int
for (i in 0 until s.length) {
if (s[i] == '0') {
++countZero
continue
}
++countOne
diff = i - lastOne - 1
prevResult = curResult
cTarget = countOne - 1
pTarget = cTarget - 1
pWait = prevResult - (lastOne - pTarget)
curResult = if (diff > pWait) {
countZero
} else {
if (countZero == 0) 0 else pWait - diff + 1 + countZero
}
result = curResult
lastOne = i
}
return result
}
}