Program to count number of swaps required to group all 1s together in Python


Suppose we have a binary string, and we can swap any two bits. We have to find the minimum number of swaps required to group all 1s together.

So, if the input is like s = "0111001", then the output will be 1, as We can perform these swaps: 0111001 -> 1111000.

To solve this, we will follow these steps −

  • data := a list of 0s and 1s from the given binary string
  • set one := 0, n:= length of data array
  • make an array summ of size n, and fill this with 0, set summ[0] := data[0]
  • one := one + data[0]
  • for i in range 1 to n – 1
    • summ[i] := summ[i - 1] + data[i]
    • one := one + data[i]
  • ans := one
  • left := 0, right := one – 1
  • while right < n
    • if left is 0, then temp := summ[right], otherwise temp := summ[right] – summ[left - 1]
    • ans := minimum of ans, one – temp
    • increase right and left by 1
  • return ans

Example (Python)

Let us see the following implementation to get better understanding −

 Live Demo

class Solution(object):
   def solve(self, s):
      data = list(map(int, list(s)))
      one = 0
      n = len(data)
      summ=[0 for i in range(n)]
      summ[0] = data[0]
      one += data[0]
      for i in range(1,n):
         summ[i] += summ[i-1]+data[i]
         one += data[i]
      ans = one
      left = 0
      right = one-1
      while right <n:
         if left == 0:
            temp = summ[right]
         else:
            temp = summ[right] - summ[left-1]
         ans = min(ans,one-temp)
         right+=1
         left+=1
      return ans
ob = Solution()
s = "0111001"
print(ob.solve(s))

Input

"0111001"

Output

1

Updated on: 12-Dec-2020

84 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements