Related Articles
Minimum swaps required to convert one binary string to another
• Difficulty Level : Medium
• Last Updated : 10 Dec, 2018

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

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

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

 ``
Output:
```3
```

Time Complexity: O(n)

My Personal Notes arrow_drop_up