Open In App

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

Last Updated : 16 Sep, 2022
Comments
Improve
Suggest changes
Like Article
Like
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))

Next Article
Practice Tags :

Similar Reads