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:3Explanation:

Initial String – “00000”

Flip the 2nd bit – “01111”

Flip the 3rd bit – “01000”

Flip the 4th bit – “01011”

Total Flips = 3Input:S = “01001”Output:3Explanation:

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<bits/stdc++.h> ` `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 ` |

*chevron_right*

*filter_none*

## 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)); ` ` ` `} ` `} ` |

*chevron_right*

*filter_none*

## 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 ` |

*chevron_right*

*filter_none*

## 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 ` |

*chevron_right*

*filter_none*

**Output:**

2

**Time Complexity:** O(N)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- Minimize flips required to make all shortest paths from top-left to bottom-right of a binary matrix equal to S
- Minimum flips required in a binary string such that all K-size substring contains 1
- Minimum flips required to keep all 1s together in a Binary string
- Minimum non-adjacent pair flips required to remove all 0s from a Binary String
- Minimum bit flips such that every K consecutive bits contain at least one set bit
- Minimum flips required to maximize a number with k set bits
- Minimum Count of Bit flips required to make a Binary String Palindromic
- Minimum flips required to convert given string into concatenation of equal substrings of length K
- Find Bit whose minimum sequence flips makes all bits same
- Count minimum right flips to set all values in an array
- Minimum flips to make all 1s in left and 0s in right | Set 2
- Minimum flips to make all 1s in left and 0s in right | Set 1 (Using Bitmask)
- Minimum changes required to make first string substring of second string
- Minimum changes required such that the string satisfies the given condition
- Count minimum bits to flip such that XOR of A and B equal to C
- Check if all bits can be made same by single flip
- Minimum flips required to generate continuous substrings of 0’s and 1’s
- Minimum number of flips with rotation to make binary string alternating
- Minimum given operations required to convert a given binary string to all 1's
- Minimum operations required to convert a binary string to all 0s or all 1s

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.