Generate a string consisting of characters 'a' and 'b' that satisfy the given conditions - GeeksforGeeks

28 May, 2021
Given two integers A and B, the task is to generate and print a string str such that:  
str must only contain the characters ‘a’ and ‘b’.str has length A + B and the occurrence of character ‘a’ is equal to A and the occurrence of character ‘b’ is equal to BThe sub-strings “aaa” or “bbb” must not occur in str.
str must only contain the characters ‘a’ and ‘b’.
str has length A + B and the occurrence of character ‘a’ is equal to A and the occurrence of character ‘b’ is equal to B
The sub-strings “aaa” or “bbb” must not occur in str.
Note that 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++
Java
Python 3
C#
PHP
Javascript
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std; // Function to generate and print the required stringvoid 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 codeint main(){    int A = 2, B = 6;    generateString(A, B);     return 0;}
// Java implementation of the approachclass 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 implementation of the approach # Function to generate and print# the required stringdef 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 codeif __name__ == "__main__":         A = 2    B = 6    generateString(A, B) # This code is contributed by ita_c
// C# implementation of the approachusing 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// PHP implementation of the approach // Function to generate and// print the required stringfunction generateString($A, $B){    $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');            }        }    }    echo($rt);} // Driver code$A = 2; $B = 6;generateString($A, $B); // This code is contributed// by Code Mech?>
<script>// Javascript implementation of the approach  // Function to generate and    // print the required stringfunction generateString(A,B){    let 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');                }            }        }        document.write(rt);} // Driver codelet A = 2, B = 6;generateString(A, B);  // This code is contributed by avanitrachhadiya2155</script>
bbabbabb
 
princiraj1992
ankthon
ukasp
Code_Mech
avanitrachhadiya2155
Constructive Algorithms
Strings
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Top 50 String Coding Problems for Interviews
Naive algorithm for Pattern Searching
Vigenère Cipher
Count words in a given string
Hill Cipher
How to Append a Character to a String in C
Convert character array to string in C++
Program to count occurrence of a given character in a string
sprintf() in C
Converting Roman Numerals to Decimal lying between 1 to 3999