# BinaryGap – Codility – Solution

Java solution to Codility BinaryGap problem (Lesson 1 – Iterations) which scored 100%. The problem is to find the longest sequence of zeros in a binary representation of an integer. The main strategy is:

• convert the integer to a binary string
• go through each character one by one and save the index of each 1 to a list
• go through the list of 1 indices and look for the largest difference in indices
```
1234567891011121314151617181920212223242526package com.codility.lesson01.iterations;

import java.util.ArrayList;
import java.util.List;

public class BinaryGap {
public int solution(int N) {
String binaryString = Integer.toBinaryString(N);

int longestBinaryGap = 0;
List onesList = new ArrayList();

for(int i=0; i<binaryString.length(); i++) {
if(binaryString.charAt(i) == '0') continue;
}

for(int i=0; i<onesList.size() - 1; i++) {
//subtract 1 so that don't count 1's next to each other as having any gap
int indicesDiff = onesList.get(i+1) - onesList.get(i) - 1;

longestBinaryGap = Math.max(longestBinaryGap, indicesDiff);
}
return longestBinaryGap;
}
}

```

TestNG test cases for this problem which all passed:

```
123456789101112131415161718192021222324252627282930313233343536373839package test.com.codility.lesson01.iterations;

import org.testng.Assert;
import org.testng.annotations.*;

import com.codility.lesson01.iterations.BinaryGap;

public class BinaryGapTests {
private BinaryGap solution;

@BeforeTest
public void setUp() {
solution = new BinaryGap();
}

@DataProvider(name = "test1")
public Object [][] createData1() {
return new Object [][] {
new Object [] {          0,  0 },
new Object [] {          9,  2 },
new Object [] {         15,  0 },
new Object [] {         32,  0 },
new Object [] {        529,  4 },
new Object [] {       1041,  5 },
new Object [] {      65536,  0 },
new Object [] {      65537, 15 },
new Object [] {     100000,  4 },
new Object [] {    2147483,  5 },
new Object [] { 2147483637,  1 }, //max - 10
new Object [] { 2147483646,  0 }, //max - 1
new Object [] { 2147483647,  0 }  //max
};
}

@Test(dataProvider = "test1")
public void verifySolution(int pInput, int expectedBinaryGap) {
Assert.assertEquals(solution.solution(pInput), expectedBinaryGap);
}
}

```