Related Articles

# Generate lexicographically smallest string of 0, 1 and 2 with adjacent swaps allowed

• Last Updated : 01 Jun, 2021

Given a string str containing only characters 0, 1, and 2, you can swap any two adjacent (consecutive) characters 0 and 1 or any two adjacent (consecutive) characters 1 and 2. The task is to obtain the minimum possible (lexicographically) string by using these swaps an arbitrary number of times.
Examples:

Input: str = “100210”
Output: 001120
We can swap 0 and 1 OR we can swap 1 and 2. Swapping 0 and 2 is not allowed. All the swaps can happen for adjacent only.
Input: str = “2021”
Output: 1202
Note that 0 and 2 cannot be swapped

Approach: You can print all the 1s together as 1 can be swapped with either of the other characters while 0 and 2 can not be swapped, so all the 0s and 2s will follow the same order as the original string.
Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;` `// Function to print the required string``void` `printString(string str, ``int` `n)``{``    ``// count number of 1s``    ``int` `ones = 0;``    ``for` `(``int` `i = 0; i < n; i++)``        ``if` `(str[i] == ``'1'``)``            ``ones++;` `    ``// To check if the all the 1s``    ``// have been used or not``    ``bool` `used = ``false``;` `    ``for` `(``int` `i = 0; i < n; i++) {``        ``if` `(str[i] == ``'2'` `&& !used) {``            ``used = 1;` `            ``// Print all the 1s if any 2 is encountered``            ``for` `(``int` `j = 0; j < ones; j++)``                ``cout << ``"1"``;``        ``}` `        ``// If str[i] = 0 or str[i] = 2``        ``if` `(str[i] != ``'1'``)``            ``cout << str[i];``    ``}` `    ``// If 1s are not printed yet``    ``if` `(!used)``        ``for` `(``int` `j = 0; j < ones; j++)``            ``cout << ``"1"``;``}` `// Driver code``int` `main()``{``    ``string str = ``"100210"``;``    ``int` `n = str.length();``    ``printString(str, n);``    ``return` `0;``}`

## Java

 `// Java implementation of the approach` `class` `GFG``{` `// Function to print the required string``static` `void` `printString(``char``[] str, ``int` `n)``{``    ``// count number of 1s``    ``int` `ones = ``0``;``    ``for` `(``int` `i = ``0``; i < n; i++)``        ``if` `(str[i] == ``'1'``)``            ``ones++;` `    ``// To check if the all the 1s``    ``// have been used or not``    ``boolean` `used = ``false``;` `    ``for` `(``int` `i = ``0``; i < n; i++)``    ``{``        ``if` `(str[i] == ``'2'` `&& !used)``        ``{``            ``used = ``true``;` `            ``// Print all the 1s if any 2 is encountered``            ``for` `(``int` `j = ``0``; j < ones; j++)``                ``System.out.print(``"1"``);``        ``}` `        ``// If str[i] = 0 or str[i] = 2``        ``if` `(str[i] != ``'1'``)``            ``System.out.print(str[i]);` `    ``}` `    ``// If 1s are not printed yet``    ``if` `(!used)``        ``for` `(``int` `j = ``0``; j < ones; j++)``            ``System.out.print(``"1"``);``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``String str = ``"100210"``;``    ``int` `n = str.length();``    ``printString(str.toCharArray(), n);``}``}` `/* This code contributed by PrinciRaj1992 */`

## Python3

 `# Python3 implementation of the approach` `# Function to print the required string``def` `printString(Str1, n):` `    ``# count number of 1s``    ``ones ``=` `0``    ``for` `i ``in` `range``(n):``        ``if` `(Str1[i] ``=``=` `'1'``):``            ``ones ``+``=` `1` `    ``# To check if the all the 1s``    ``# have been used or not``    ``used ``=` `False` `    ``for` `i ``in` `range``(n):``        ``if` `(Str1[i] ``=``=` `'2'` `and` `used ``=``=` `False``):``            ``used ``=` `1` `            ``# Print all the 1s if any 2 is encountered``            ``for` `j ``in` `range``(ones):``                ``print``(``"1"``, end ``=` `"")` `        ``# If Str1[i] = 0 or Str1[i] = 2``        ``if` `(Str1[i] !``=` `'1'``):``            ``print``(Str1[i], end ``=` `"")` `    ``# If 1s are not printed yet``    ``if` `(used ``=``=` `False``):``        ``for` `j ``in` `range``(ones):``            ``print``(``"1"``, end ``=` `"")` `# Driver code``Str1 ``=` `"100210"``n ``=` `len``(Str1)``printString(Str1, n)` `# This code is contributed``# by Mohit Kumar`

## C#

 `// C# implementation of the approach``using` `System;` `class` `GFG``{` `// Function to print the required string``static` `void` `printString(``char``[] str, ``int` `n)``{``    ``// count number of 1s``    ``int` `ones = 0;``    ``for` `(``int` `i = 0; i < n; i++)``        ``if` `(str[i] == ``'1'``)``            ``ones++;` `    ``// To check if the all the 1s``    ``// have been used or not``    ``bool` `used = ``false``;` `    ``for` `(``int` `i = 0; i < n; i++)``    ``{``        ``if` `(str[i] == ``'2'` `&& !used)``        ``{``            ``used = ``true``;` `            ``// Print all the 1s if any 2 is encountered``            ``for` `(``int` `j = 0; j < ones; j++)``                ``Console.Write(``"1"``);``        ``}` `        ``// If str[i] = 0 or str[i] = 2``        ``if` `(str[i] != ``'1'``)``            ``Console.Write(str[i]);` `    ``}` `    ``// If 1s are not printed yet``    ``if` `(!used)``        ``for` `(``int` `j = 0; j < ones; j++)``            ``Console.Write(``"1"``);``}` `// Driver code``public` `static` `void` `Main(String[] args)``{``    ``String str = ``"100210"``;``    ``int` `n = str.Length;``    ``printString(str.ToCharArray(), n);``}``}` `// This code has been contributed by 29AjayKumar`

## PHP

 ``

## Javascript

 ``
Output:
`001120`

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up