2 minute read

You are given an array items, where each items[i] = [typei, colori, namei] describes the type, color, and name of the ith item. You are also given a rule represented by two strings, ruleKey and ruleValue.

The ith item is said to match the rule if one of the following is true:

ruleKey == “type” and ruleValue == typei. ruleKey == “color” and ruleValue == colori. ruleKey == “name” and ruleValue == namei. Return the number of items that match the given rule.

Example 1:

Input: items = [[“phone”,”blue”,”pixel”],[“computer”,”silver”,”lenovo”],[“phone”,”gold”,”iphone”]], ruleKey = “color”, ruleValue = “silver” Output: 1 Explanation: There is only one item matching the given rule, which is [“computer”,”silver”,”lenovo”]. Example 2:

Input: items = [[“phone”,”blue”,”pixel”],[“computer”,”silver”,”phone”],[“phone”,”gold”,”iphone”]], ruleKey = “type”, ruleValue = “phone” Output: 2 Explanation: There are only two items matching the given rule, which are [“phone”,”blue”,”pixel”] and [“phone”,”gold”,”iphone”]. Note that the item [“computer”,”silver”,”phone”] does not match.

Constraints:

1 <= items.length <= 104 1 <= typei.length, colori.length, namei.length, ruleValue.length <= 10 ruleKey is equal to either “type”, “color”, or “name”. All strings consist only of lowercase letters.

/**
 * @param {string[][]} items
 * @param {string} ruleKey
 * @param {string} ruleValue
 * @return {number}
 */
var countMatches = function (items, ruleKey, ruleValue) {
  let key = 0,
    count = 0;
  if (ruleKey == "type") {
    key = 0;
  } else if (ruleKey == "color") {
    key = 1;
  } else if (ruleKey == "name") {
    key = 2;
  }
  for (let i = 0; i < items.length; i++) {
    if (items[i][key] == ruleValue) {
      count++;
    }
  }
  return count;
};

Count Items Matching a Rule

I have two-dimensional array named items that describes the type, color, and name of each ith item, Additionally, I have two parameters: ruleKey, which indicates whether I’m looking for a specific type, color, or name, and ruleValue, which is the value I’m searching for. The goal is to count how many items in the array match the specified ruleKey and ruleValue.

The first step is to determine which “ruleKey” is provided in the input value. This is crucial because it determines which aspect of the items I should compare. In the first example, input value is [["phone","blue","pixel"],["computer","silver","lenovo"],["phone","gold","iphone"]], ruleKey = "color", ruleValue = "silver". I need to take a look at what ruleKey is, so it’s color right now. The color section is in second section in each item. Then, I can compare only second section if ruleValue and second section in each item are matched or not.

So, I used conditional statement which is if statement to find where I should compare in interation. In each item, first section is type, second section is color, and last section is name, so the key variable is assigned what rulekey is.

After getting a key value, I used for loop to iterate all items in the items array to find how many numbers are matched with ruleValue. If a specific section and ruleValue are matched count variable will be incremented.

Lastly, return count will be returned.

All itmes were iterated by for loop, so it has O(n) for time complexity.

Leave a comment