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

• Difficulty Level : Easy
• Last Updated : 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:

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

```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 ``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

 ``

## Javascript

 ``
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 ``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

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