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 the 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: 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))