# Minimum changes required such that the string satisfies the given condition

Given a binary string str. In a single operation, we can change any ‘1’ to ‘0’ or any ‘0’ to ‘1’. The task is to make minimum number of changes in the string such that if we take any prefix of the string, the number of 1’s should be greater than or equal number of 0’s.

Examples:

Input: str = “10001”
Output: 1
We can change str[2] from ‘0’ to ‘1’.

Input: str = “0000”
Output: 2

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: The problem can be solved greedily. The first character of the string has to be 1. Then for the rest of the string we traverse through the string character by character and check if the required condition is fulfilled or not, if not then we increase the count of changes required.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to return the minimum ` `// changes required ` `int` `minChanges(string str, ``int` `n) ` `{ ` ` `  `    ``// To store the count of minimum changes, ` `    ``// number of ones and the number of zeroes ` `    ``int` `count = 0, zeros = 0, ones = 0; ` ` `  `    ``// First character has to be '1' ` `    ``if` `(str[0] != ``'1'``) { ` `        ``count++; ` `        ``ones++; ` `    ``} ` ` `  `    ``for` `(``int` `i = 1; i < n; i++) { ` `        ``if` `(str[i] == ``'0'``) ` `            ``zeros++; ` `        ``else` `            ``ones++; ` ` `  `        ``// If condition fails ` `        ``// changes need to be made ` `        ``if` `(zeros > ones) { ` `            ``zeros--; ` `            ``ones++; ` `            ``count++; ` `        ``} ` `    ``} ` ` `  `    ``// Return the required count ` `    ``return` `count; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``string str = ``"0000"``; ` `    ``int` `n = str.length(); ` `    ``cout << minChanges(str, n); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implementation of the approach ` `class` `GFG  ` `{ ` ` `  `// Function to return the minimum  ` `// changes required  ` `static` `int` `minChanges(``char``[] str, ``int` `n)  ` `{  ` ` `  `    ``// To store the count of minimum changes,  ` `    ``// number of ones and the number of zeroes  ` `    ``int` `count = ``0``, zeros = ``0``, ones = ``0``;  ` ` `  `    ``// First character has to be '1'  ` `    ``if` `(str[``0``] != ``'1'``) ` `    ``{  ` `        ``count++;  ` `        ``ones++;  ` `    ``}  ` ` `  `    ``for` `(``int` `i = ``1``; i < n; i++) ` `    ``{  ` `        ``if` `(str[i] == ``'0'``)  ` `            ``zeros++;  ` `        ``else` `            ``ones++;  ` ` `  `        ``// If condition fails  ` `        ``// changes need to be made  ` `        ``if` `(zeros > ones)  ` `        ``{  ` `            ``zeros--;  ` `            ``ones++;  ` `            ``count++;  ` `        ``}  ` `    ``}  ` ` `  `    ``// Return the required count  ` `    ``return` `count;  ` `}  ` ` `  `// Driver code  ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``char` `[]str = ``"0000"``.toCharArray();  ` `    ``int` `n = str.length;  ` `    ``System.out.print(minChanges(str, n));  ` `} ` `} ` ` `  `// This code has been contributed by 29AjayKumar `

## Python3

 `# Python3 implementation of the approach ` ` `  `# Function to return the minimum ` `# changes required ` `def` `minChanges(``str``, n): ` `     `  `    ``# To store the count of minimum changes, ` `    ``# number of ones and the number of zeroes ` `    ``count, zeros, ones ``=` `0``, ``0``, ``0` ` `  `    ``# First character has to be '1' ` `    ``if` `(``ord``(``str``[``0``])!``=` `ord``(``'1'``)): ` `        ``count ``+``=` `1` `        ``ones ``+``=` `1` ` `  `    ``for` `i ``in` `range``(``1``, n): ` `        ``if` `(``ord``(``str``[i]) ``=``=` `ord``(``'0'``)): ` `            ``zeros ``+``=` `1` `        ``else``: ` `            ``ones ``+``=` `1` ` `  `        ``# If condition fails ` `        ``# changes need to be made ` `        ``if` `(zeros > ones): ` `            ``zeros ``-``=` `1` `            ``ones ``+``=` `1` `            ``count ``+``=` `1` ` `  `    ``# Return the required count ` `    ``return` `count ` ` `  `# Driver code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``str` `=` `"0000"` `    ``n ``=` `len``(``str``) ` `    ``print``(minChanges(``str``, n)) ` ` `  `# This code contributed by PrinciRaj1992 `

## C#

 `// C# implementation of the approach ` `using` `System; ` ` `  `class` `GFG  ` `{ ` ` `  `// Function to return the minimum  ` `// changes required  ` `static` `int` `minChanges(``char``[] str, ``int` `n)  ` `{  ` ` `  `    ``// To store the count of minimum changes,  ` `    ``// number of ones and the number of zeroes  ` `    ``int` `count = 0, zeros = 0, ones = 0;  ` ` `  `    ``// First character has to be '1'  ` `    ``if` `(str[0] != ``'1'``) ` `    ``{  ` `        ``count++;  ` `        ``ones++;  ` `    ``}  ` ` `  `    ``for` `(``int` `i = 1; i < n; i++) ` `    ``{  ` `        ``if` `(str[i] == ``'0'``)  ` `            ``zeros++;  ` `        ``else` `            ``ones++;  ` ` `  `        ``// If condition fails  ` `        ``// changes need to be made  ` `        ``if` `(zeros > ones)  ` `        ``{  ` `            ``zeros--;  ` `            ``ones++;  ` `            ``count++;  ` `        ``}  ` `    ``}  ` ` `  `    ``// Return the required count  ` `    ``return` `count;  ` `}  ` ` `  `// Driver code  ` `public` `static` `void` `Main(String[] args) ` `{ ` `    ``char` `[]str = ``"0000"``.ToCharArray();  ` `    ``int` `n = str.Length;  ` `    ``Console.Write(minChanges(str, n));  ` `} ` `} ` ` `  `// This code contributed by Rajput-Ji `

## PHP

 ` ``\$ones``)  ` `        ``{ ` `            ``\$zeros``--; ` `            ``\$ones``++; ` `            ``\$count``++; ` `        ``} ` `    ``} ` ` `  `    ``// Return the required count ` `    ``return` `\$count``; ` `} ` ` `  `// Driver code ` `\$str` `= ``"0000"``; ` `\$n` `= ``strlen``(``\$str``); ` `echo` `minChanges(``\$str``, ``\$n``); ` ` `  `// This code is contributed by mits ` `?> `

Output:

```2
```

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

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.

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.