Skip to content
Related Articles

Related Articles

Check if a Binary String contains A pairs of 0s and B independent 0s or not
  • Last Updated : 27 Apr, 2021

Given a binary string S and two positive integers A and B, the task is to check if the string consists of A independent pair of adjacent 0s and B independent number of 0s in the binary string or not. If found to be true, then print “Yes”. Otherwise, print “No”.

Examples:

Input: S = “10100”, A = 1, B = 1
Output: Yes
Explanation:
The given string consists of A (=1) pairs of adjacent 0s and B (=1) independent number of 0s.

Input: S = “0101010”, A = 1, B = 2
Output: No
Explanation:
The given string has no pair of adjacent 0s.

 

Approach: Follow the steps below to solve the problem:



  • Traverse the given string S using a variable, say i, and perform the following steps:
    • If the current character is ‘0’ and its adjacent character is ‘0’ and A is at least 1, then decrease A by 1 and increase the pointer i by 1.
    • Otherwise, if the current character is ‘0’ and B is at least 1, then decrease B by 1.
  • After completing the above steps, if the value of A and B is 0, then print “Yes”. Otherwise, print “No”.

Below is the implementation of the above approach:

C++




// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if there exists
// A adjacent 0s and B 0s in the
// given binary string or not
void parking(string S, int a, int b)
{
    // Traverse the string
    for (int i = 0; i < S.size(); i++) {
        if (S[i] == '0') {
            // If there are adjacent
            // 0s and a is positive
            if (i + 1 < S.size()
                && S[i + 1] == '0'
                && a > 0) {
 
                i++;
                a--;
            }
 
            // If b is positive
            else if (b > 0) {
                b--;
            }
        }
    }
 
    // Condition for Yes
    if (a == 0 && b == 0) {
        cout << "Yes\n";
    }
    else
        cout << "No\n";
}
 
// Driver Code
int main()
{
    string S = "10100";
    int A = 1, B = 1;
    parking(S, A, B);
}

Java




// Java program for the above approach
import java.util.*;
 
class GFG{
 
// Function to check if there exists
// A adjacent 0s and B 0s in the
// given binary string or not
static void parking(String S, int a, int b)
{
     
    // Traverse the string
    for(int i = 0; i < S.length(); i++)
    {
        if (S.charAt(i) == '0')
        {
             
            // If there are adjacent
            // 0s and a is positive
            if (i + 1 < S.length() &&
                S.charAt(i + 1) == '0' && a > 0)
            {
                i++;
                a--;
            }
 
            // If b is positive
            else if (b > 0)
            {
                b--;
            }
        }
    }
 
    // Condition for Yes
    if (a == 0 && b == 0)
    {
        System.out.print("Yes\n");
    }
    else
        System.out.print("No\n");
}
 
// Driver Code
public static void main (String[] args)
{
     
    // Given string
    String S = "10100";
    int A = 1, B = 1;
     
    parking(S, A, B);
}
}
 
// This code is contributed by sanjoy_62

Python3




# Python3 program for the above approach
 
# Function to check if there exists
# A adjacent 0s and B 0s in the
# given binary string or not
def parking(S, a, b):
     
    # Traverse the string
    for i in range(len(S)):
        if (S[i] == '0'):
             
            # If there are adjacent
            # 0s and a is positive
            if (i + 1 < len(S) and
              S[i + 1] == '0' and a > 0):
                i += 1
                a -= 1
 
            # If b is positive
            elif (b > 0):
                b -= 1
 
    # Condition for Yes
    if (a == 0 and b == 0):
        print("Yes")
    else:
        print("No")
 
# Driver Code
if __name__ == '__main__':
     
    S = "10100"
    A = 1
    B = 1
     
    parking(S, A, B)
     
# This code is contributed by SURENDRA_GANGWAR

C#




// C# program for the above approach
using System;
 
class GFG{
 
// Function to check if there exists
// A adjacent 0s and B 0s in the
// given binary string or not
static void parking(string S, int a, int b)
{
     
    // Traverse the string
    for(int i = 0; i < S.Length; i++)
    {
        if (S[i] == '0')
        {
             
            // If there are adjacent
            // 0s and a is positive
            if (i + 1 < S.Length &&
                 S[i + 1] == '0' && a > 0)
            {
                i++;
                a--;
            }
 
            // If b is positive
            else if (b > 0)
            {
                b--;
            }
        }
    }
 
    // Condition for Yes
    if (a == 0 && b == 0)
    {
        Console.WriteLine("Yes");
    }
    else
         Console.WriteLine("No");
}
 
// Driver Code
public static void Main (string[] args)
{
     
    // Given string
    string S = "10100";
    int A = 1, B = 1;
     
    parking(S, A, B);
}
}
 
// This code is contributed by AnkThon

Javascript




<script>
// Function to check if there exists
// A adjacent 0s and B 0s in the
// given binary string or not
function parking( S, a, b)
{
    // Traverse the string
    for (var i = 0; i < S.length; i++) {
        if (S[i] == '0') {
            // If there are adjacent
            // 0s and a is positive
            if (i + 1 < S.length
                && S[i + 1] == '0'
                && a > 0) {
 
                i++;
                a--;
            }
 
            // If b is positive
            else if (b > 0) {
                b--;
            }
        }
    }
 
    // Condition for Yes
    if (a == 0 && b == 0) {
        document.write("Yes"+"<br>");
    }
    else
        document.write( "No"+"<br>");
}
 
var S = "10100";
var A = 1, B = 1;
parking(S, A, B);
 
//This code is contributed by SoumikMondal
</script>
Output: 
Yes

 

Time Complexity: O(N)
Auxiliary Space: O(1)

 

My Personal Notes arrow_drop_up
Recommended Articles
Page :