Minimum number of characters to be removed to make a binary string alternate

Given a binary string, the task is to find minimum number of characters to be removed from it so that it becomes alternate. A binary string is alternate if there are no two consecutive 0s or 1s.

Examples :

Input  : s = "000111"
Output : 4  
We need to delete two 0s and
two 1s to make string alternate.

Input  : s = "0000"
Output : 3  
We need to delete three characters
to make it alternate.

Input  :  s = "11111"
Output :  4   

Input  : s = "01010101"
Output : 0   

Input  : s = "101010"
Output : 0  

This problem has below simple solution.

We traverse string from left to right and compare current character with next character.

  1. If current and next are different then no need to perform deletion.
  2. If current and next are same, we need to perform one delete operation to make them alternate.

Below is the implementation of above algorithm.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find minimum number
// of characters to be removed to make
// a string alternate.
#include <bits/stdc++.h>
using namespace std;
  
// Returns count of minimum characters to
// be removed to make s alternate.
void countToMake0lternate(const string& s)
{
    int result = 0;
  
    for (int i = 0; i < (s.length() - 1); i++)
  
        // if two alternating characters
        // of string are same
        if (s[i] == s[i + 1])
            result++; // then need to
    // delete a character
  
    return result;
}
  
// Driver code
int main()
{
    cout << countToMake0lternate("000111") << endl;
    cout << countToMake0lternate("11111") << endl;
    cout << countToMake0lternate("01010101") << endl;
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find minimum number
// of characters to be removed to make
// a string alternate.
import java.io.*;
  
public class GFG {
  
    // Returns count of minimum characters to
    // be removed to make s alternate.
    static int countToMake0lternate(String s)
    {
        int result = 0;
  
        for (int i = 0; i < (s.length() - 1); i++)
  
            // if two alternating characters
            // of string are same
            if (s.charAt(i) == s.charAt(i + 1))
                result++; // then need to
        // delete a character
  
        return result;
    }
  
    // Driver code
    static public void main(String[] args)
    {
        System.out.println(countToMake0lternate("000111"));
        System.out.println(countToMake0lternate("11111"));
        System.out.println(countToMake0lternate("01010101"));
    }
}
  
// This code is contributed by vt_m.

chevron_right


Python 3

# Python 3 program to find minimum number
# of characters to be removed to make
# a string alternate.

# Returns count of minimum characters
# to be removed to make s alternate.
def countToMake0lternate(s):

result = 0

for i in range(len(s) – 1):

# if two alternating characters
# of string are same
if (s[i] == s[i + 1]):
result += 1 # then need to
# delete a character

return result

# Driver code
if __name__ == “__main__”:

print(countToMake0lternate(“000111”))
print(countToMake0lternate(“11111”))
print(countToMake0lternate(“01010101”))

# This code is contributed by ita_c

C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find minimum number
// of characters to be removed to make
// a string alternate.
using System;
  
public class GFG {
  
    // Returns count of minimum characters to
    // be removed to make s alternate.
    static int countToMake0lternate(string s)
    {
        int result = 0;
  
        for (int i = 0; i < (s.Length - 1); i++)
  
            // if two alternating characters
            // of string are same
            if (s[i] == s[i + 1])
                result++; // then need to
        // delete a character
  
        return result;
    }
  
    // Driver code
    static public void Main()
    {
        Console.WriteLine(countToMake0lternate("000111"));
        Console.WriteLine(countToMake0lternate("11111"));
        Console.WriteLine(countToMake0lternate("01010101"));
    }
}
  
// This article is contributed by vt_m.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find minimum number
// of characters to be removed to make
// a string alternate.
  
// Returns count of minimum characters
// to be removed to make s alternate.
function countToMake0lternate($s)
{
    $result = 0;
  
    for ($i = 0; $i < (strlen($s) - 1); $i++)
  
        // if two alternating characters
        // of string are same
        if ($s[$i] == $s[$i + 1])
          
            // then need to
            // delete a character
            $result++;
      
  
    return $result;
}
  
    // Driver code
    echo countToMake0lternate("000111"),"\n" ;
    echo countToMake0lternate("11111"),"\n" ;
    echo countToMake0lternate("01010101") ;
  
// This code is contributed by nitin mittal. 
?>

chevron_right



Output:

4
4
0

Time Complexity : O(n) where n is number of characters in input string.

This article is contributed by Ravi Maurya(Trojan). 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 write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up

Improved By : vt_m, nitin mittal, Ita_c



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.