2 minute read

There are n rings and each ring is either red, green, or blue. The rings are distributed across ten rods labeled from 0 to 9.

You are given a string rings of length 2n that describes the n rings that are placed onto the rods. Every two characters in rings forms a color-position pair that is used to describe each ring where:

The first character of the ith pair denotes the ith ring’s color (‘R’, ‘G’, ‘B’). The second character of the ith pair denotes the rod that the ith ring is placed on (‘0’ to ‘9’). For example, “R3G2B1” describes n == 3 rings: a red ring placed onto the rod labeled 3, a green ring placed onto the rod labeled 2, and a blue ring placed onto the rod labeled 1.

Return the number of rods that have all three colors of rings on them.

Example 1:

Input: rings = “B0B6G0R6R0R6G9” Output: 1 Explanation:

  • The rod labeled 0 holds 3 rings with all colors: red, green, and blue.
  • The rod labeled 6 holds 3 rings, but it only has red and blue.
  • The rod labeled 9 holds only a green ring. Thus, the number of rods with all three colors is 1. Example 2:

Input: rings = “B0R0G0R9R0B0G0” Output: 1 Explanation:

  • The rod labeled 0 holds 6 rings with all colors: red, green, and blue.
  • The rod labeled 9 holds only a red ring. Thus, the number of rods with all three colors is 1. Example 3:

Input: rings = “G4” Output: 0 Explanation: Only one ring is given. Thus, no rods have all three colors.

/**
 * @param {string} rings
 * @return {number}
 */
var countPoints = function (rings) {
  // set up a hash table to store the rings
  let hash = {};
  // initialize a count variable to 0
  let count = 0;

  // iterate through the rings string
  for (let i = 1; i < rings.length; i += 2) {
    // if the hash table has the ring
    if (hash[rings[i]]) {
      // push the ring into the hash table
      hash[rings[i]].push(rings[i - 1]);
      // Otherwise
    } else {
      // set the ring to the hash table
      hash[rings[i]] = [rings[i - 1]];
    }
  }
  // iterate through the hash table
  for (let key in hash) {
    // if the hash table has all three colors
    if (
      hash[key].includes("R") &&
      hash[key].includes("G") &&
      hash[key].includes("B")
    ) {
      // increment the count
      count++;
    }
  }
  // return the count
  return count;
};

Initialize an empty object hash to store pairs of values from even and odd indices and a count variable to keep track of the count.

Use a for loop to iterate through the rings array starting from the second element (index 1) with a step size of 2 (i.e., accessing elements at odd indices). For each odd-index element (rings[i]), do the following:

Check if the element at the odd index (rings[i]) exists as a key in the hash object. If it exists, push the element at the previous even index (rings[i-1]) into the array associated with that key. If it doesn’t exist, create a new key in the hash object and set its value to an array containing the element at the previous even index (rings[i-1]). After constructing the hash object, use a for...in loop to iterate over its keys. For each key, check if the associated array includes the values “R”, “G”, and “B”. If it does, increment the count variable.

Finally, return the count, which represents the number of elements that meet the specified criteria.

Leave a comment