The following is updated per comments:
function binaryGap(number) {
var binary = (number >>> 0).toString(2);
var maxGap = 0;
var currentGap = 0;
for(var iinGap = 0,false;
var length = binary.length;
/*
Fast return if binary string length is less than 3
and no gap is possible
*/
if(length < 3) {
return 0;
}
/*
Start iterating bits. We start with second character.
*/
for(var i = 1; i < length; i++) {
/*
See if we should continue evaluation based on whether
we can actually exceed current maxGap number
*/
if (maxGap >= currentGap + length - i) {
break;
}
/*
if (inGap === false) {
If we encounter a 1, // we need to reset currentGap
check to see if a new gap is */started
if (binary[i]binary[i-1] === '1' && binary[i] === '0') {
// we are in a new gap
currentGap = 0;1;
continue; inGap = true;
}
} else {
// incrementwe currentGapneed to see if gap has ended
currentGap++; if (binary[i] === '1') {
// reset maxGapgap ifhas appropriateended
if (currentGap > maxGap) {
maxGap = currentGap;
}
} else {
// gap has continued
currentGap++;
}
}
}
return maxGap;
}
Here is a simple performance test I set up comparing the approaches. I am actually getting some inconsistent results Typically, withI am seeing the bit iteration typically executingmethod working in shorter timeframe, but sometimeabout 20-25% of the time that the regex being faster. So there might not be much difference performance wiseworks.
https://jsfiddle.net/2475w4n0/https://jsfiddle.net/2475w4n0/2/