Skip to content
Related Articles

Related Articles

Improve Article

Check if it is possible to rearrange a binary string with alternate 0s and 1s

  • Difficulty Level : Basic
  • Last Updated : 02 Jul, 2021

Given a binary string of length, at least two. We need to check if it is possible to rearrange a binary string such that there alternate 0’s and 1’s. If possible, then the output is YES, otherwise the output is NO.

Examples:

Input : 1011 
Output : NO 
We can’t rearrange the string such that it has alternate 0s and 1s.

Input : 1100 
Output : YES 
There are exactly two ways to rearrange the string, and they are 0101 or 1010 . 

We can place all 0’s in an even position and all 1’s in an odd position or we can place all 0’s in an odd position and all 1’s in an even position. If the length of the string is even, then to satisfy the given condition, the count of 1’s and 0’s must be equal. If the length of the string is odd then to satisfy the given condition, the absolute difference in the count 
of 1’s and 0’s must be one. 



Below is the implementation of the above approach:  

C++




// CPP program to check if we can rearrange a
// string such that it has alternate 0s and 1s.
#include <bits/stdc++.h>
using namespace std;
 
// function to check the binary string
bool is_possible(string s)
{
    // length of string
    int l = s.length();
 
    int one = 0, zero = 0;
 
    for (int i = 0; i < l; i++) {
 
        // count zero's
        if (s[i] == '0')
            zero++;
 
        // count one's
        else
            one++;
    }
 
    // if length is even
    if (l % 2 == 0)
        return (one == zero);
 
    // if length is odd
    else
        return (abs(one - zero) == 1);
}
 
// Driver code
int main()
{
    string s = "100110";
    if (is_possible(s))
      cout << "Yes";
    else
      cout << "No";
    return 0;
}

Java




// Java program to check if we can rearrange a
// string such that it has alternate 0s and 1s.
import java.lang.Math;
 
public class GfG{
     
    // function to check the binary string
    public static boolean is_possible(String s)
    {
        // length of string
        int l = s.length();
       
        int one = 0, zero = 0;
       
        for (int i = 0; i < l; i++) {
       
            // count zero's
            if (s.charAt(i) == '0')
                zero++;
       
            // count one's
            else
                one++;
        }
       
        // if length is even
        if (l % 2 == 0
            return (one == zero);
       
        // if length is odd
        else
            return (Math.abs(one - zero) == 1);
    }
 
    public static void main(String []args){
         
        String s = "100110";
        if (is_possible(s))
          System.out.println("Yes");
        else
          System.out.println("No");
    }
}
 
// This code is contributed by Rituraj Jain

Python 3




# Python3 program to check if
# we can rearrange a
# string such that it has alternate
# 0s and 1s.
 
# function to check the binary string
def is_possible(s):
 
    # length of string
    l = len(s)
 
    one = 0
    zero = 0
 
    for i in range(0,l) :
 
        # count zero's
        if (s[i] == '0'):
            zero += 1
 
        # count one's
        else:
            one += 1
 
    # if length is even
    if (l % 2 == 0) :
        return (one == zero)
 
    # if length is odd
    else:
        return (abs(one - zero) == 1)
 
# Driver code
if __name__ == "__main__":
    s = "100110"
    if (is_possible(s)):
        print("Yes")
    else:
        print("No")
 
# This code is contributed by
# ChitraNayal

C#




// C# program to check if we can rearrange a
// string such that it has alternate 0s and 1s.
using System;
 
class GfG
{
     
    // function to check the binary string
    public static bool is_possible(String s)
    {
        // length of string
        int l = s.Length;
         
        int one = 0, zero = 0;
         
        for (int i = 0; i < l; i++)
        {
         
            // count zero's
            if (s[i] == '0')
                zero++;
         
            // count one's
            else
                one++;
        }
         
        // if length is even
        if (l % 2 == 0)
            return (one == zero);
         
        // if length is odd
        else
            return (Math.Abs(one - zero) == 1);
    }
 
    // Driver code
    public static void Main(String []args)
    {
         
        String s = "100110";
        if (is_possible(s))
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
    }
}
 
// This code is contributed by Rajput-Ji

PHP




<?php
// PHP program to check if we can rearrange a
// string such that it has alternate 0s and 1s.
 
// function to check the binary string
function is_possible($s)
{
    // length of string
    $l = strlen($s);
 
    $one = 0;
    $zero = 0;
 
    for ($i = 0; $i < $l; $i++)
    {
 
        // count zero's
        if ($s[$i] == '0')
            $zero++;
 
        // count one's
        else
            $one++;
    }
 
    // if length is even
    if ($l % 2 == 0)
        return ($one == $zero);
 
    // if length is odd
    else
        return (abs($one - $zero) == 1);
}
 
// Driver code
$s = "100110";
if (is_possible($s))
    echo("Yes");
else
    echo("No");
 
// This code is contributed by
// Shivi_Aggarwal
?>

Javascript




<script>
// Javascript program to check if we can rearrange a
// string such that it has alternate 0s and 1s.
     
    // function to check the binary string
    function is_possible(s)
    {
        // length of string
        let l = s.length;
         
        let one = 0, zero = 0;
         
        for (let i = 0; i < l; i++) {
         
            // count zero's
            if (s[i] == '0')
                zero++;
         
            // count one's
            else
                one++;
        }
         
        // if length is even
        if (l % 2 == 0) 
            return (one == zero);
         
        // if length is odd
        else
            return (Math.abs(one - zero) == 1);
    }
     
    let s = "100110";
        if (is_possible(s))
          document.write("Yes");
        else
          document.write("No");
       
 
 
// This code is contributed by avanitrachhadiya2155
</script>
Output: 
Yes

 

Time Complexity: O(l), where l is the length of the binary string.
 

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :