Open In App

Check if a string follows a^nb^n pattern or not

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

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 appear 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.


Python3




# 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 appear 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 appear 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.
?>


Javascript




<script>
// Javascript program to check if a string is of
// the form a^nb^n.
  
function isAnBn(s)
{
    let 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
        let i = 0;
        let 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;
}
  
let s = "abab";
  
// Function call
let value = isAnBn(s);
if (value == true) {
    document.write("Yes");
}
else {
    document.write("No");
}
  
  
// This code is contributed by ab2127
</script>


Output

No

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

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


Javascript




<script>
// Javascript code to check a^nb^n
// pattern
  
// Returns "Yes" str is of the form a^nb^n.
function isAnBn(str)
{
    let n = str.length;
    if ((n & 1) != 0)
      return "No";
   
    // check first half is 'a' and other half is full of 'b'
    let i;
    for (i = 0; i < n / 2; i++)
      if (str[i] != 'a' || str[n - i - 1] != 'b')
        return "No";
    return "Yes";
}
  
// Driver code
let str = "ab";
  
// Function call
document.write(isAnBn(str));
  
// This code is contributed by unknown2108
</script>


Output

Yes

Time complexity : O(n) 
Auxiliary Space : O(1)

 



Last Updated : 11 Jul, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads