This question is often asked in interviews to test the candidate's approach to thinking about code.

Problem Statement

You have a string which contains only 0's and 1's. You need to write a program which will return the number of 0's and 1's, and you are not allowed to use a counter variable by any means.

Seems tricky right?

Worry not - it's very simple. I am going to teach you how to do it both ways:

  • With a counter (the classic approach)
  • Without using a counter (as required in the interview question)

Let's Code

With a Counter

function count(str) {
  var countForZero = 0;
  var countForOne = 0;
    
  for (var i = 0, length = str.length; i < length; i++) {
    if (str[i] === '0') {
      countForZero++;
    }
    else {
      countForOne++;
    }
  }
    
  return {
    'zero': countForZero,
    'One': countForOne
  };
}

The logic of the above code is:

  • Keep two variables for counting zeros and ones.
  • Loop through the characters of the string, and when a zero is found, increment countForZero. When a one is found, increment countForOne.
  • In the last part, we are returning the count in an object.

You can try the above code using this link: https://repl.it/repls/PurpleIdolizedInstructions

Now, let's see the solution without a counter.

Without a Counter

function count(str) {
  var sum = 0;
  
  for (var i = 0, length = str.length; i < length; i++) {
    sum += Number(str[i]);
  }
  
  return {
    'zero': str.length - sum,
    'One': sum
  };
}

As you can see in the above code, I am not using any counter, but rather a variable called sum. So what's the concept here?

The concept is:

The sum of a character of a string which contains zero and one will always be equal to the number of 1's.

For example: 0011001 : 0+0+1+1+0+0+1 = 3 = number of 1's

And the number of zeroes = length of string - number of 1's

The logic of the above code is:

  • Keep a sum variable initialized with value zero.
  • Loop through the characters of string and take the sum of all the characters.
  • The sum of all the characters of the string will be the number of 1's, and the number of zeroes will be the (length of string - number of 1's).
  • In the last part, we are returning the count in an object.

You can try the above code using this link: https://repl.it/repls/ComfortableOrdinaryConversions

I hope you are able to understand how to answer this question both with and without a counter now.

If you have any questions, feel free to ask in the comment section. Or if you have any other tricks, let me know as well.