Related Articles

# Minimum swaps required to convert one binary string to another

• Difficulty Level : Medium
• Last Updated : 28 May, 2021

Given two binary string M and N of equal length, the task is to find a minimum number of operations (swaps) required to convert string N to M.
Examples:

```Input: str1 = "1101", str2 = "1110"
Output: 1
Swap last and second last element in the binary string,
so that it become 1101

Input: str1 = "1110000", str2 = "0001101"
Output: 3```

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.

Approach: Initialize the counter and Iterate over the M such that if any non-equal elements found in both binary strings, increment the counter. In the end, if the counter is even then print the result/2 because for one swap two elements are non-identical.
Suppose S1 = “10” and S2 = “01”, so two pairs are non-identical, the count = 2 and as the count is even, so number of swaps are count/2, i.e. 1. Even count determines that there are chances to swap the elements.
Below is the implementation of the above approach:

## C++

 `// C++ implementation of the above approach``#include ``using` `namespace` `std;` `// Method to count swaps``void` `minSwaps(string str1, string str2)``{``    ``// Initialize the count``    ``int` `count = 0;` `    ``// Iterate the loop with str1 length``    ``for` `(``int` `i = 0; i < str1.length(); i++) {` `        ``// If any non-equal elements are found``        ``// increment the counter``        ``if` `(str1[i] != str2[i])``            ``count++;``    ``}` `    ``// If counter is even print the swap``    ``if` `(count % 2 == 0)``        ``cout << count / 2;``    ``else``        ``cout << ``"Not Possible"``;``}` `// Driver code``int` `main()``{``    ``// Take two input``    ``string binaryString1 = ``"1110000"``;``    ``string binaryString2 = ``"0001101"``;` `    ``// Call the method``    ``minSwaps(binaryString1, binaryString2);` `    ``return` `0;``}`

## Java

 `// Java Program to count minimum number of swap``// required to make string N to M``public` `class` `GFG {` `    ``// Method to count swaps``    ``static` `void` `minSwaps(String str1, String str2)``    ``{``        ``// Initialize the count``        ``int` `count = ``0``;` `        ``// Iterate the loop with str1 length``        ``for` `(``int` `i = ``0``; i < str1.length(); i++) {` `            ``// If any non-equal elements are found``            ``// increment the counter``            ``if` `(str1.charAt(i) != str2.charAt(i))``                ``count++;``        ``}` `        ``// If counter is even print the swap``        ``if` `(count % ``2` `== ``0``)``            ``System.out.println(count / ``2``);``        ``else``            ``System.out.println(``"Not Possible"``);``    ``}` `    ``// Driver Code``    ``public` `static` `void` `main(String args[])``    ``{``        ``// Take two input``        ``String binaryString1 = ``"1110000"``;``        ``String binaryString2 = ``"0001101"``;` `        ``// Call the method``        ``minSwaps(binaryString1, binaryString2);``    ``}``}`

## Python 3

 `# Python3 implementation of``# the above approach` `# function to count swaps``def` `minSwaps(str1, str2) :` `    ``# Initialize the count``    ``count ``=` `0` `    ``# Iterate the loop with``    ``# length of str1``    ``for` `i ``in` `range``(``len``(str1)) :` `        ``# If any non-equal elements are``        ``# found increment the counter``        ``if` `str1[i] !``=` `str2[i] :``            ``count ``+``=` `1` `    ``# If counter is even print``    ``# the swap``    ``if` `count ``%` `2` `=``=` `0` `:``        ``print``(count ``/``/` `2``)``    ``else` `:``        ``print``(``"Not Possible"``)`  `# Driver code``if` `__name__ ``=``=` `"__main__"` `:` `    ``# Take two input``    ``binaryString1 ``=` `"1110000"``    ``binaryString2 ``=` `"0001101"` `    ``# Call the function``    ``minSwaps( binaryString1, binaryString2)` `# This code is contributed by ANKITRAI1`

## C#

 `// C# Program to count minimum number of swap``// required to make string N to M``using` `System;``class` `GFG``{` `// Method to count swaps``static` `void` `minSwaps(``string` `str1, ``string` `str2)``{``    ``// Initialize the count``    ``int` `count = 0;` `    ``// Iterate the loop with str1 length``    ``for` `(``int` `i = 0; i < str1.Length; i++) {` `        ``// If any non-equal elements are found``        ``// increment the counter``        ``if` `(str1[i] != str2[i])``            ``count++;``    ``}` `    ``// If counter is even print the swap``    ``if` `(count % 2 == 0)``        ``Console.WriteLine(count / 2);``    ``else``        ``Console.WriteLine(``"Not Possible"``);``}` `// Driver Code``public` `static` `void` `Main()``{``    ``// Take two input``    ``string` `binaryString1 = ``"1110000"``;``    ``string` `binaryString2 = ``"0001101"``;` `    ``// Call the method``    ``minSwaps(binaryString1, binaryString2);``}``}` `// This code is contributed``// by Akanksha Rai(Abby_akku)`

## PHP

 ``

## Javascript

 ``
Output:
`3`

Time Complexity: O(n)

My Personal Notes arrow_drop_up