Check If every group of a’s is followed by a group of b’s of same length
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: 1
ab, ab, aabb. All groups are valid
Input: str = “aabbabb”
Output: 0
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
Time Complexity : O( | s | ) ,where | s | is length of given string s.
Space Complexity : O(1) ,as we are not using any extra space