Open In App

Check If every group of a’s is followed by a group of b’s of same length

Last Updated : 12 Sep, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

Given string str, the task is to check whether every group of consecutive a’s is followed by a group of consecutive b’s of the same length. If the condition is true for every group then print 1 else print 0.

Examples: 

Input: str = “ababaabb” 
Output:
ab, ab, aabb. All groups are valid

Input: str = “aabbabb” 
Output:
aabb, abb (A single ‘a’ followed by 2 ‘b’) 

Approach: 

  • For every a in the string increment the count.
  • Starting from the first b, decrement the count for every b.
  • If at the end of the above cycle, count != 0 then return false.
  • Else repeat the first two steps for the rest of the string.
  • Return true if the condition is satisfied for all the cycles else print 0.

Below is the implementation of the above approach: 

C++




// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to match whether there are always n consecutive b's
// followed by n consecutive a's throughout the string
int matchPattern(string s)
{
    int count = 0;
    int n = s.length();
 
    // Traverse through the string
    int i = 0;
    while (i < n) {
 
        // Count a's in current segment
        while (i < n && s[i] == 'a') {
            count++;
            i++;
        }
 
        // Count b's in current segment
        while (i < n && s[i] == 'b') {
            count--;
            i++;
        }
 
        // If both counts are not same.
        if (count != 0)
            return false;
    }
 
    return true;
}
 
// Driver code
int main()
{
    string s = "bb";
    if (matchPattern(s) == true)
        cout << "Yes";
    else
        cout << "No";
    return 0;
}


Java




// Java implementation of the above approach
 
public class GFG{
 
// Function to match whether there are always n consecutive b's
// followed by n consecutive a's throughout the string
static boolean matchPattern(String s)
{
    int count = 0;
    int n = s.length();
 
    // Traverse through the string
    int i = 0;
    while (i < n) {
 
        // Count a's in current segment
        while (i < n && s.charAt(i) == 'a') {
            count++;
            i++;
        }
 
        // Count b's in current segment
        while (i < n && s.charAt(i) == 'b') {
            count--;
            i++;
        }
 
        // If both counts are not same.
        if (count != 0)
            return false;
    }
 
    return true;
}
 
// Driver code
public static void main(String []args)
{
    String s = "bb";
    if (matchPattern(s) == true)
        System.out.println("Yes");
    else
        System.out.println("No");
}
 
// This code is contributed by Ryuga
}


Python3




# Python 3 implementation of the approach
 
# Function to match whether there are
# always n consecutive b's followed by
# n consecutive a's throughout the string
def matchPattern(s):
 
    count = 0;
    n = len(s);
 
    # Traverse through the string
    i = 0;
    while (i < n) :
 
        # Count a's in current segment
        while (i < n and s[i] == 'a'):
 
            count += 1 ;
            i =+ 1;
 
        # Count b's in current segment
        while (i < n and s[i] == 'b'):
            count -= 1 ;
            i += 1;
     
        # If both counts are not same.
        if (count != 0):
            return False;
 
    return True;
 
# Driver code
s = "bb";
if (matchPattern(s) == True):
    print("Yes");
else:
    print("No");
 
# This code is contributed
# by Akanksha Rai


C#




// C# implementation of the above approach
  
using System;
public class GFG{
  
// Function to match whether there are always n consecutive b's
// followed by n consecutive a's throughout the string
static bool matchPattern(string s)
{
    int count = 0;
    int n = s.Length;
  
    // Traverse through the string
    int i = 0;
    while (i < n) {
  
        // Count a's in current segment
        while (i < n && s[i] == 'a') {
            count++;
            i++;
        }
  
        // Count b's in current segment
        while (i < n && s[i] == 'b') {
            count--;
            i++;
        }
  
        // If both counts are not same.
        if (count != 0)
            return false;
    }
  
    return true;
}
  
// Driver code
public static void Main()
{
    string s = "bb";
    if (matchPattern(s) == true)
        Console.Write("Yes");
    else
        Console.Write("No");
}
 
}


PHP




<?php
//PHP implementation of the approach
 
// Function to match whether there are always n consecutive b's
// followed by n consecutive a's throughout the string
function  matchPattern($s)
{
    $count = 0;
    $n = strlen($s);
 
    // Traverse through the string
    $i = 0;
    while ($i < $n) {
 
        // Count a's in current segment
        while ($i < $n && $s[$i] == 'a') {
            $count++;
            $i++;
        }
 
        // Count b's in current segment
        while ($i < $n && $s[$i] == 'b') {
            $count--;
            $i++;
        }
 
        // If both counts are not same.
        if ($count != 0)
            return false;
    }
 
    return true;
}
 
// Driver code
  
    $s = "bb";
    if (matchPattern($s) == true)
        echo  "Yes";
    else
        echo "No";
     
 
// This code is contributed by ajit
?>


Javascript




<script>
 
    // Javascript implementation of
    // the above approach
     
    // Function to match whether there are
    // always n consecutive b's
    // followed by n consecutive a's
    // throughout the string
    function matchPattern(s)
    {
        let count = 0;
        let n = s.length;
 
        // Traverse through the string
        let i = 0;
        while (i < n)
        {
 
            // Count a's in current segment
            while (i < n && s[i] == 'a')
            {
                count++;
                i++;
            }
 
            // Count b's in current segment
            while (i < n && s[i] == 'b')
            {
                count--;
                i++;
            }
 
            // If both counts are not same.
            if (count != 0)
                return false;
        }
 
        return true;
    }
     
    let s = "bb";
    if (matchPattern(s) == true)
        document.write("Yes");
    else
        document.write("No");
     
</script>


Output

No

Complexity Analysis:

  • Time Complexity : O( | s | ) ,where | s | is length of given string s.
  • Space Complexity : O(1) ,as we are not using any extra space


Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads