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

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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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

 ` `

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.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.