Skip to content
Related Articles

Related Articles

Generate a string consisting of characters ‘a’ and ‘b’ that satisfy the given conditions
  • Last Updated : 22 Feb, 2019

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




// 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
?>
Output:
bbabbabb
My Personal Notes arrow_drop_up
Recommended Articles
Page :