Minimum operations required to convert a binary string to all 0s or all 1s - GeeksforGeeks

06 May, 2021
Given a binary string str, the task is to find the minimum number of operations required to make all the characters of the string same i.e. either the resultant string contains all 0s or all 1s. In a single operation, any block of consecutive 0s can be converted to a block of consecutive 1s of the same length and vice versa.Examples:  
Input: str = “000111” Output: 1 In a single operation, either change all 0s to 1s or change all 1s to 0s.Input: str = “0011101010” Output: 3 All the 1s can be converted to 0s in 3 operations.  
 
Approach: The problem is to convert all the characters into a single one. Now since converting a whole consecutive group of characters counts as a single step. You can calculate the number of different groups as separated by each other due to the presence of other characters in between them. Now the number of steps would be simply the minimum of both the numbers. Hence, the answer will be the minimum of the count of consecutive blocks of 0s or the count of consecutive blocks of 1s.Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std; // Function to return the count of// minimum operations requiredint minOperations(string str, int n){    int count = 0;    for (int i = 0; i < n - 1; i++) {         // Increment count when consecutive        // characters are different        if (str[i] != str[i + 1])            count++;    }     // Answer is rounding off the    // (count / 2) to lower    return (count + 1) / 2;} // Driver codeint main(){    string str = "000111";    int n = str.length();     cout << minOperations(str, n);     return 0;}
// Java implementation of the approachclass GFG{ // Function to return the count of// minimum operations requiredstatic int minOperations(String str, int n){    int count = 0;    for (int i = 0; i < n - 1; i++)    {         // Increment count when consecutive        // characters are different        if (str.charAt(i) != str.charAt(i + 1))            count++;    }     // Answer is rounding off the    // (count / 2) to lower    return (count + 1) / 2;} // Driver codepublic static void main(String[] args){    String str = "000111";    int n = str.length();     System.out.println(minOperations(str, n));}} // This code is contributed by Princi Singh
# Python3 implementation of the approach # Function to return the count of# minimum operations requireddef minOperations(str, n):    count = 0    for i in range(n - 1):         # Increment count when consecutive        # characters are different        if (str[i] != str[i + 1]):            count += 1     # Answer is rounding off the    # (count / 2) to lower    return (count + 1) // 2 # Driver codestr = "000111"n = len(str) print(minOperations(str, n)) # This code is contributed# by Mohit Kumar
// C# implementation of the approachusing System; class GFG{ // Function to return the count of// minimum operations requiredstatic int minOperations(string str, int n){    int count = 0;    for (int i = 0; i < n - 1; i++)    {         // Increment count when consecutive        // characters are different        if (str[(i)] != str[(i + 1)])            count++;    }     // Answer is rounding off the    // (count / 2) to lower    return (count + 1) / 2;} // Driver codepublic static void Main(){    string str = "000111";    int n = str.Length;     Console.WriteLine(minOperations(str, n));}} // This code is contributed by Code_Mech
<script> //Javascript implementation of the approach // Function to return the count of// minimum operations requiredfunction minOperations(str, n){    var count = 0;    for (var i = 0; i < n - 1; i++) {         // Increment count when consecutive        // characters are different        if (str[i] != str[i + 1])            count++;    }     // Answer is rounding off the    // (count / 2) to lower    return (count + 1) / 2;}  var str = "000111"; var n = str.length;document.write(minOperations(str, n)); // This code is contributed by SoumikMondal</script>
1
 
mohit kumar 29
princi singh
Code_Mech
SoumikMondal
binary-string
Strings
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Check for Balanced Brackets in an expression (well-formedness) using Stack
Python program to check if a string is palindrome or not
KMP Algorithm for Pattern Searching
Different methods to reverse a string in C/C++
Array of Strings in C++ (5 Different Ways to Create)
Convert string to char array in C++
Check whether two strings are anagram of each other
Longest Palindromic Substring | Set 1
Caesar Cipher in Cryptography
Top 50 String Coding Problems for Interviews