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

10 Jul, 2021
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++
Java
Python3
C#
PHP
Javascript
// 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 codeint main(){    string str = "abab";       // Function call    isAnBn(str) ? cout << "Yes" : cout << "No";    return 0;}
// 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 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 codeif __name__ == "__main__":    str = "abab"    print("Yes") if isAnBn(str) else print("No") # This code is contributed# by ChitraNayal
// 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 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.?>
<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 calllet value = isAnBn(s);if (value == true) {    document.write("Yes");}else {    document.write("No");}  // This code is contributed by ab2127</script>
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++
Java
Python3
C#
Javascript
// 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 codeint main(){    string str = "ab";       // Function call    cout << isAnBn(str);    return 0;}
// Java code to check a^nb^n// patternimport 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 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 codeinput_str = "ab" # Function callprint(isanbn(input_str))
// C# code to check a^nb^n// patternusing 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
<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 codelet str = "ab"; // Function calldocument.write(isAnBn(str)); // This code is contributed by unknown2108</script>
Yes
YouTubeGeeksforGeeks500K subscribersCheck if a string follows a^nb^n pattern or not | GeeksforGeeksWatch laterShareCopy linkInfoShoppingTap to unmuteIf playback doesn't begin shortly, try restarting your device.You're signed outVideos you watch may be added to the TV's watch history and influence TV recommendations. To avoid this, cancel and sign in to YouTube on your computer.CancelConfirmMore videosMore videosSwitch cameraShareInclude playlistAn error occurred while retrieving sharing information. Please try again later.Watch on0:000:000:00 / 1:55•Live•<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=ydmOFg2HLmc" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
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 write.geeksforgeeks.org or mail your article to review-team@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. 
nitin mittal
ukasp
Majorssn
raghavmandowara
rag2127
avanitrachhadiya2155
ab2127
unknown2108
rajeev0719singh
binary-string
Strings
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Python program to check if a string is palindrome or not
Different methods to reverse a string in C/C++
KMP Algorithm for Pattern Searching
Convert string to char array in C++
Array of Strings in C++ (5 Different Ways to Create)
Longest Palindromic Substring | Set 1
Reverse words in a given string
Caesar Cipher in Cryptography
Length of the longest substring without repeating characters
Check whether two strings are anagram of each other