GeeksforGeeks App
Open App
Browser
Continue

# Generate a string consisting of characters ‘a’ and ‘b’ that satisfy the given conditions

Given two integers A and B, the task is to generate and print a string str such that:

1. str must only contain the characters ‘a’ and ‘b’.
2. str has length A + B and the occurrence of the character ‘a’ is equal to A and the occurrence of character ‘b’ is equal to B
3. The sub-strings “aaa” or “bbb” must not occur in str.

Note: For the given values of A and B, a valid string can always be generated.

Examples:

```Input: A = 1, B = 2
Output: abb
"abb", "bab" and "bba" are all valid strings.```
```Input: A = 4, B = 1
Output: aabaa ```

Approach:

• If occurrence(a) > occurrence(b) then append “aab”
• If occurrence(b) > occurrence(a) then append “bba”
• If occurrence(a) = occurrence(b) then append “ab”

Since we reduce the difference between the occurrences of ‘a’ and ‘b’ by at most 1 in each iteration so “bba” and “aab” are guaranteed not to be followed by “aab” and “bba” respectively.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;` `// Function to generate and print the required string``void` `generateString(``int` `A, ``int` `B)``{``    ``string rt;``    ``while` `(0 < A || 0 < B) {` `        ``// More 'b', append "bba"``        ``if` `(A < B) {``            ``if` `(0 < B--)``                ``rt.push_back(``'b'``);``            ``if` `(0 < B--)``                ``rt.push_back(``'b'``);``            ``if` `(0 < A--)``                ``rt.push_back(``'a'``);``        ``}` `        ``// More 'a', append "aab"``        ``else` `if` `(B < A) {``            ``if` `(0 < A--)``                ``rt.push_back(``'a'``);``            ``if` `(0 < A--)``                ``rt.push_back(``'a'``);``            ``if` `(0 < B--)``                ``rt.push_back(``'b'``);``        ``}` `        ``// Equal number of 'a' and 'b'``        ``// append "ab"``        ``else` `{``            ``if` `(0 < A--)``                ``rt.push_back(``'a'``);``            ``if` `(0 < B--)``                ``rt.push_back(``'b'``);``        ``}``    ``}``    ``cout << rt;``}` `// Driver code``int` `main()``{``    ``int` `A = 2, B = 6;``    ``generateString(A, B);` `    ``return` `0;``}`

## Java

 `// Java implementation of the approach``class` `GFG``{` `    ``// Function to generate and``    ``// print the required string``    ``static` `void` `generateString(``int` `A, ``int` `B)``    ``{``        ``String rt = ``""``;``        ``while` `(``0` `< A || ``0` `< B)``        ``{` `            ``// More 'b', append "bba"``            ``if` `(A < B)``            ``{``                ``if` `(``0` `< B--)``                ``{``                    ``rt += (``'b'``);``                ``}``                ``if` `(``0` `< B--)``                ``{``                    ``rt += (``'b'``);``                ``}``                ``if` `(``0` `< A--)``                ``{``                    ``rt += (``'a'``);``                ``}``            ``}``            ` `            ``// More 'a', append "aab"``            ``else` `if` `(B < A)``            ``{``                ``if` `(``0` `< A--)``                ``{``                    ``rt += (``'a'``);``                ``}``                ``if` `(``0` `< A--)``                ``{``                    ``rt += (``'a'``);``                ``}``                ``if` `(``0` `< B--)``                ``{``                    ``rt += (``'b'``);``                ``}``            ``}``            ` `            ``// Equal number of 'a' and 'b'``            ``// append "ab"``            ``else``            ``{``                ``if` `(``0` `< A--)``                ``{``                    ``rt += (``'a'``);``                ``}``                ``if` `(``0` `< B--)``                ``{``                    ``rt += (``'b'``);``                ``}``            ``}``        ``}``        ``System.out.println(rt);``    ``}` `    ``// Driver code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `A = ``2``, B = ``6``;``        ``generateString(A, B);``    ``}``}` `// This code is contributed``// by PrinciRaj1992`

## Python 3

 `# Python 3 implementation of the approach` `# Function to generate and print``# the required string``def` `generateString(A, B):` `    ``rt ``=` `""``    ``while` `(``0` `< A ``or` `0` `< B) :` `        ``# More 'b', append "bba"``        ``if` `(A < B) :``            ``if` `(``0` `< B):``                ``rt ``=` `rt ``+``'b'``                ``B ``-``=` `1``            ``if` `(``0` `< B):``                ``rt ``+``=` `'b'``                ``B ``-``=` `1``            ``if` `(``0` `< A):``                ``rt ``+``=` `'a'``                ``A ``-``=` `1` `        ``# More 'a', append "aab"``        ``elif` `(B < A):``            ``if` `(``0` `< A):``                ``rt ``+``=` `'a'``                ``A ``-``=` `1``            ``if` `(``0` `< A):``                ``rt ``+``=` `'a'``                ``A ``-``=` `1``            ``if` `(``0` `< B):``                ``rt ``+``=` `'b'``                ``B ``-``=` `1` `        ``# Equal number of 'a' and 'b'``        ``# append "ab"``        ``else` `:``            ``if` `(``0` `< A):``                ``rt ``+``=` `'a'``                ``A ``-``=` `1``            ``if` `(``0` `< B):``                ``rt ``+``=` `'b'``                ``B ``-``=` `1``    ``print``(rt)` `# Driver code``if` `__name__ ``=``=` `"__main__"``:``    ` `    ``A ``=` `2``    ``B ``=` `6``    ``generateString(A, B)` `# This code is contributed by ita_c`

## C#

 `// C# implementation of the approach``using` `System;` `class` `GFG``{` `    ``// Function to generate and``    ``// print the required string``    ``static` `void` `generateString(``int` `A, ``int` `B)``    ``{``        ``string` `rt = ``""``;``        ``while` `(0 < A || 0 < B)``        ``{` `            ``// More 'b', append "bba"``            ``if` `(A < B)``            ``{``                ``if` `(0 < B--)``                ``{``                    ``rt += (``'b'``);``                ``}``                ``if` `(0 < B--)``                ``{``                    ``rt += (``'b'``);``                ``}``                ``if` `(0 < A--)``                ``{``                    ``rt += (``'a'``);``                ``}``            ``}``            ` `            ``// More 'a', append "aab"``            ``else` `if` `(B < A)``            ``{``                ``if` `(0 < A--)``                ``{``                    ``rt += (``'a'``);``                ``}``                ``if` `(0 < A--)``                ``{``                    ``rt += (``'a'``);``                ``}``                ``if` `(0 < B--)``                ``{``                    ``rt += (``'b'``);``                ``}``            ``}``            ` `            ``// Equal number of 'a' and 'b'``            ``// append "ab"``            ``else``            ``{``                ``if` `(0 < A--)``                ``{``                    ``rt += (``'a'``);``                ``}``                ``if` `(0 < B--)``                ``{``                    ``rt += (``'b'``);``                ``}``            ``}``        ``}``        ``Console.WriteLine(rt);``    ``}` `    ``// Driver code``    ``public` `static` `void` `Main()``    ``{``        ``int` `A = 2, B = 6;``        ``generateString(A, B);``    ``}``}` `// This code is contributed by Ryuga`

## PHP

 ``

## Javascript

 ``

Output

`bbabbabb`

Complexity Analysis:

• Time Complexity: O(Max(a,b))
• Auxiliary Space: O(Max(a,b))

My Personal Notes arrow_drop_up