Skip to content

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'.

 

Solutions

Solution: Sliding Window

  • Time complexity: O(n)
  • Space complexity: O(1)

 

JavaScript

js
/**
 * @param {string} s
 * @return {number}
 */
const minFlips = function (s) {
  const size = s.length;
  let startZero = (startOne = 0);
  let result = 0;

  for (let index = 0; index < size; index++) {
    const value = s[index];

    value === `${index % 2}` ? (startOne += 1) : (startZero += 1);
  }
  result = Math.min(startZero, startOne);

  for (let index = 0; index < size; index++) {
    const value = s[index];

    value === `${(size + index) % 2}` ? (startOne += 1) : (startZero += 1);
    value === `${index % 2}` ? (startOne -= 1) : (startZero -= 1);
    result = Math.min(result, startZero, startOne);
  }
  return result;
};

Released under the MIT license