Open In App

# Minimum flips required to form given binary string where every flip changes all bits to its right as well

Given a string S, the task is to find minimum flips required to convert an initial binary string consisting of only zeroes to S where every flip of a character flips all succeeding characters as well.
Examples:

Input: S = “01011”
Output:
Explanation:
Initial String – “00000”
Flip the 2nd bit – “01111”
Flip the 3rd bit – “01000”
Flip the 4th bit – “01011”
Total Flips = 3
Input: S = “01001”
Output:
Explanation:
Initial String – “00000”
Flip the 2nd bit – “01111”
Flip the 3rd bit – “01000”
Flip the 5th bit – “01001”
Total Flips = 3

Approach:
In order to solve the problem, follow the steps below:

• Store ‘1’ in curr initially.
• Traverse S and find the first occurrence of curr. Increase count when curr is encountered. Store ‘0’ if curr is ‘1’ or vice versa.
• Repeat the above step for entire traversal of S.
• Final value of count gives the required answer.

Below is the implementation of the above approach.

## C++

 `// C++ program for the above approach``#include``using` `namespace` `std;` `// Function to return the count``// of minimum flips required``int` `minFlips(string target)``{``    ``char` `curr = ``'1'``;``    ``int` `count = 0;``    ``for``(``int` `i = 0; i < target.length(); i++)``    ``{``        ` `       ``// If curr occurs in the final string``       ``if` `(target[i] == curr)``       ``{``           ``count++;``           ` `           ``// Switch curr to '0' if '1'``           ``// or vice-versa``           ``curr = (``char``)(48 + (curr + 1) % 2);``       ``}``    ``}``    ``return` `count;``}` `// Driver Code``int` `main()``{``    ``string S = ``"011000"``;``    ` `    ``cout << (minFlips(S));``}` `// This code is contributed by rock_cool`

## Java

 `// Java program for the above approach``import` `java.util.Arrays;` `public` `class` `GFG {``    ``// Function to return the count of``    ``// minimum flips required``    ``public` `static` `int` `minFlips(String target)``    ``{` `        ``char` `curr = ``'1'``;``        ``int` `count = ``0``;``        ``for` `(``int` `i = ``0``; i < target.length(); i++) {` `            ``// If curr occurs in the final string``            ``if` `(target.charAt(i) == curr) {` `                ``count++;` `                ``// Switch curr to '0' if '1'``                ``// or vice-versa``                ``curr = (``char``)(``48` `+ (curr + ``1``) % ``2``);``            ``}``        ``}` `        ``return` `count;``    ``}` `    ``// Driver Code``    ``public` `static` `void` `main(String args[])``    ``{` `        ``String S = ``"011000"``;``        ``System.out.println(minFlips(S));``    ``}``}`

## Python3

 `# Python3 program for the above approach` `# Function to return the count``# of minimum flips required``def` `minFlips(target):` `    ``curr ``=` `'1'``    ``count ``=` `0``    ` `    ``for` `i ``in` `range``(``len``(target)):``        ` `        ``# If curr occurs in the final string``        ``if` `(target[i] ``=``=` `curr):``            ``count ``+``=` `1``            ` `            ``# Switch curr to '0' if '1'``            ``# or vice-versa``            ``curr ``=` `chr``(``48` `+` `(``ord``(curr) ``+` `1``) ``%` `2``)``    ` `    ``return` `count` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:``    ` `    ``S ``=` `"011000"``    ` `    ``print``(minFlips(S))` `# This code is contributed by chitranayal`

## C#

 `// C# program for the above approach``using` `System;` `class` `GFG{``    ` `// Function to return the count of``// minimum flips required``public` `static` `int` `minFlips(String target)``{``    ``char` `curr = ``'1'``;``    ``int` `count = 0;``    ``for``(``int` `i = 0; i < target.Length; i++)``    ``{``        ` `       ``// If curr occurs in the readonly string``       ``if` `(target[i] == curr)``       ``{``           ``count++;``           ` `           ``// Switch curr to '0' if '1'``           ``// or vice-versa``           ``curr = (``char``)(48 + (curr + 1) % 2);``       ``}``    ``}``    ``return` `count;``}` `// Driver code``public` `static` `void` `Main(String []args)``{``    ``String S = ``"011000"``;``    ``Console.WriteLine(minFlips(S));``}``}` `// This code is contributed by 29AjayKumar`

## Javascript

 ``

Output:

`2`

Time Complexity: O(N)
Auxiliary Space: O(1)