# 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`

My Personal Notes arrow_drop_up