Skip to content
Related Articles

Related Articles

Check if a string follows a^nb^n pattern or not
  • Difficulty Level : Easy
  • Last Updated : 10 Mar, 2021
GeeksforGeeks - Summer Carnival Banner

Given string str, return true string follows pattern anbn, i.e., it has a’s followed by b’s such that the number of a’s and b’s are same.

Examples:  

Input : str = "aabb"
Output : Yes

Input : str = "abab"
Output : No

Input : str = "aabbb"
Output : No

The idea is to first count a’s. If number of a’s is not equal to half of string’s length, then return false. Else check if all remaining characters are b’s or not.

Below is the implementation of the above idea :  

C++




// C++ program to check if a string is of
// the form a^nb^n.
#include <iostream>
using namespace std;
 
// Returns true str is of the form a^nb^n.
bool isAnBn(string str)
{
    int n = str.length();
 
    // After this loop 'i' has count of a's
    int i;
    for (i = 0; i < n; i++)
        if (str[i] != 'a')
            break;
 
    // Since counts of a's and b's should
    // be equal, a should apear exactly
    // n/2 times
    if (i * 2 != n)
        return false;
 
    // Rest of the characters must be all 'b'
    int j;
    for (j = i; j < n; j++)
        if (str[j] != 'b')
            return false;
 
    return true;
}
 
// Driver code
int main()
{
    string str = "abab";
   
    // Function call
    isAnBn(str) ? cout << "Yes" : cout << "No";
    return 0;
}

Java




// Java program to check if a string is of
// the form a^nb^n.
import java.util.*;
import java.lang.*;
import java.io.*;
 
class CheckPattern {
    public static boolean isAnBn(String s)
    {
        int l = s.length();
 
        // Only even length strings will have same number of
        // a's and b's
        if (l % 2 == 1) {
            return false;
        }
        // Set two pointers, one from the left and another
        // from right
        int i = 0;
        int j = l - 1;
 
        // Compare the characters till the center
        while (i < j) {
            if (s.charAt(i) != 'a' || s.charAt(j) != 'b') {
                return false;
            }
            i++;
            j--;
        }
        return true;
    }
 
    public static void main(String[] args)
        throws java.lang.Exception
    {
        String s = "abab";
 
        // Function call
        boolean value = isAnBn(s);
        if (value == true) {
            System.out.println("Yes");
        }
        else {
            System.out.println("No");
        }
    }
}
 
// Code contributed by Shivani Sanjay Shinde.

Python 3




# Python 3program to check if a
# string is of the form a^nb^n.
 
# Returns true str is of the
# form a^nb^n.
 
 
def isAnBn(str):
 
    n = len(str)
 
    # After this loop 'i' has
    # count of a's
    for i in range(n):
        if (str[i] != 'a'):
            break
 
    # Since counts of a's and b's should
    # be equal, a should apear exactly
    # n/2 times
    if (i * 2 != n):
        return False
 
    # Rest of the characters must
    # be all 'b'
    for j in range(i, n):
        if (str[j] != 'b'):
            return False
 
    return True
 
 
# Driver code
if __name__ == "__main__":
    str = "abab"
    print("Yes") if isAnBn(str) else print("No")
 
# This code is contributed
# by ChitraNayal

C#




// C# program to check if a string
// is of the form a^ nb ^ n.
using System;
 
class GFG {
 
    // Function returns true str is of the form a^nb^n.
    public static bool isAnBn(String s)
    {
        int l = s.Length;
 
        // Only even length strings will have
        // same number of a's and b's
        if (l % 2 == 1) {
            return false;
        }
 
        // Set two pointers, one from the
        // left and another from right
        int i = 0;
        int j = l - 1;
 
        // Compare the characters
        // till the center
        while (i < j) {
            if (s[i] != 'a' || s[j] != 'b') {
                return false;
            }
            i++;
            j--;
        }
        return true;
    }
 
    // Driver Code
    public static void Main()
    {
        String s = "abab";
 
        // Function call
        bool value = isAnBn(s);
        if (value == true) {
            Console.Write("Yes");
        }
        else {
            Console.Write("No");
        }
    }
}
 
// This code is contributed by Nitin Mittal.

PHP




<?php
// PHP program to check if a string
// is of the form a^nb^n.
 
// Returns true str is of
// the form a^nb^n.
function isAnBn($str)
{
    $n = strlen($str);
     
    // After this loop 'i'
    // has count of a's
    $i;
    for($i = 0; $i < $n; $i++)
        if ($str[$i] != 'a')
            break;
     
    // Since counts of a's and b's should
    // be equal, a should apear exactly
    // n/2 times
    if ($i * 2 != $n)
        return false;
     
    // Rest of the characters
    // must be all 'b'
    $j;
    for($j = $i; $j < $n; $j++)
        if ($str[$j] != 'b')
            return false;
     
    return true;
}
 
    // Driver code
    $str = "abab";
    if(isAnBn($str))
        echo "Yes";
    else   
        echo "No";
 
// This code is contributed by nitin mittal.
?>

 
 



Output
No

 

Another approach:
The idea is to check element from first and last if at any stage our condition is not satisfied then return false.

 

Below is the implementation of the above code:

 

C++




// C++ code to check a^nb^n
// pattern
#include <iostream>
using namespace std;
 
// Returns "Yes" str is of the form a^nb^n.
string isAnBn(string str)
{
    int n = str.length();
    if (n & 1)
        return "No";
     
    // check first half is 'a' and other half is full of 'b'
    int i;
    for (i = 0; i < n / 2; i++)
        if (str[i] != 'a' || str[n - i - 1] != 'b')
            return "No";
    return "Yes";
}
 
// Driver code
int main()
{
    string str = "ab";
   
    // Function call
    cout << isAnBn(str);
    return 0;
}

Java




// Java code to check a^nb^n
// pattern
import java.io.*;
class GFG {
 
  // Returns "Yes" str is of the form a^nb^n.
  static String isAnBn(String str)
  {
    int n = str.length();
    if ((n & 1) != 0)
      return "No";
 
    // check first half is 'a' and other half is full of 'b'
    int i;
    for (i = 0; i < n / 2; i++)
      if (str.charAt(i) != 'a' || str.charAt(n - i - 1) != 'b')
        return "No";
    return "Yes";
  }
 
  // Driver code
  public static void main (String[] args)
  {
    String str = "ab";
 
    // Function call
    System.out.println(isAnBn(str));
  }
}
 
// This code is contributed by rag2127

Python3




# Python3 code to check
# a^nb^n pattern
 
def isanbn(str):
  n=len(str)
   
  # if length of str is odd return No
  if n&1:
    return "No"
   
  # check first half is 'a' and other half is full of 'b'
  for i in range(int(n/2)):
    if str[i]!='a' or str[n-i-1]!='b':
      return "No"
  return "Yes"
     
# Driver code
input_str = "ab"
 
# Function call
print(isanbn(input_str))

C#




// C# code to check a^nb^n
// pattern
using System;
public class GFG
{
 
  // Returns "Yes" str is of the form a^nb^n.
  static string isAnBn(string str)
  {
    int n = str.Length;
    if ((n & 1) != 0)
      return "No";
 
    // check first half is 'a' and other half is full of 'b'
    int i;
    for (i = 0; i < n / 2; i++)
      if (str[i] != 'a' || str[n-i-1] != 'b')
        return "No";
    return "Yes";
  }
 
  // Driver code
  static public void Main ()
  {
    string str = "ab";
 
    // Function call
    Console.WriteLine(isAnBn(str));
  }
}
 
// This code is contributed by avanitrachhadiya2155
Output
Yes

This article is contributed by Aditya Kumar , Raghav mandowara . If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 

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.

My Personal Notes arrow_drop_up
Recommended Articles
Page :