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 validInput: 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
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
Article Tags :
Recommended Articles