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.
- If current and next are different then no need to perform deletion.
- 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++
// 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;
} |
Java
// 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. |
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#
// 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" ));
}
} // |
PHP
<?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. ?> |
Javascript
<script> // Javascript 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)
{
let result = 0;
for (let 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
document.write(countToMake0lternate( "000111" )+ "<br>" );
document.write(countToMake0lternate( "11111" )+ "<br>" );
document.write(countToMake0lternate( "01010101" )+ "<br>" );
// This code is contributed by rag2127
</script> |
Output:
4 4 0
Time Complexity : O(n) where n is number of characters in input string.
Auxiliary Space: O(1)
This article is contributed by Aarti_Rathi and Ravi Maurya.