Open In App

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

Improve
Improve
Like Article
Like
Save
Share
Report

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 <bits/stdc++.h>
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




<?php
// PHP implementation of the approach
 
// Function to generate and
// print the required string
function 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
?>


Javascript




<script>
// Javascript implementation of the approach
 
 // Function to generate and
    // print the required string
function 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 code
let A = 2, B = 6;
generateString(A, B);
 
 
// This code is contributed by avanitrachhadiya2155
</script>


Output

bbabbabb

Complexity Analysis:

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


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