# 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 := data
• one := one + data
• 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 = data
one += data
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