Your current code allocates several objects on the heap even though it doesn't need to. A string, a character array and several character objects. Puzzles like this can often be solved not by inspecting the individual bits but by processing them in parallel. An alternative approach is: To find the binary gap of n: * Discard all trailing zeros. * As long as n does not consist of 1s only: * Combine n with n shifted to the right by one place. * The number of repetitions is the length of the largest gap. Taking 1000010001000 as an example: 1000010001 1100011001 1110011101 1111011111 1111111111 It took 4 steps, therefore the binary gap is 4. In Java, this code becomes (typed off my head, so there may be typos): public static binaryGap(int n) { n >>>= Integer.numberOfTrailingZeros(n); int steps = 0; while ((n & (n + 1)) != 0) { n |= n >>> 1; steps++; } return steps; }