1888. Minimum Number of Flips to Make the Binary String Alternating
Description
You are given a binary string s
. You are allowed to perform two types of operations on the string in any sequence:
- Type-1: Remove the character at the start of the string
s
and append it to the end of the string. - Type-2: Pick any character in
s
and flip its value, i.e., if its value is'0'
it becomes'1'
and vice-versa.
Return the minimum number of type-2 operations you need to perform such that s
becomes alternating.
The string is called alternating if no two adjacent characters are equal.
- For example, the strings
"010"
and"1010"
are alternating, while the string"0100"
is not.
Example 1:
Input: s = "111000" Output: 2 Explanation: Use the first operation two times to make s = "100011". Then, use the second operation on the third and sixth elements to make s = "101010".
Example 2:
Input: s = "010" Output: 0 Explanation: The string is already alternating.
Example 3:
Input: s = "1110" Output: 1 Explanation: Use the second operation on the second element to make s = "1010".
Constraints:
1 <= s.length <= 105
s[i]
is either'0'
or'1'
.
Solution
minimum-number-of-flips-to-make-the-binary-string-alternating.py
class Solution:
def minFlips(self, s: str) -> int:
n = len(s)
s += s
A, B = '', ''
for i in range(len(s)):
A += '1' if i % 2 == 0 else '0'
B += '0' if i % 2 == 0 else '1'
res = float('inf')
count1 = count2 = 0
for i in range(len(s)):
if A[i] != s[i]: count1 += 1
if B[i] != s[i]: count2 += 1
if i >= n:
if A[i - n] != s[i - n]: count1 -= 1
if B[i - n] != s[i - n]: count2 -= 1
if i >= n - 1:
res = min(res, count1, count2)
return res