Formatted question description: https://leetcode.ca/all/1773.html

1773. Count Items Matching a Rule

Level

Easy

Description

You are given an array items, where each items[i] = [type_i, color_i, name_i] describes the type, color, and name of the i-th item. You are also given a rule represented by two strings, ruleKey and ruleValue.

The i-th item is said to match the rule if one of the following is true:

  • ruleKey == "type" and ruleValue == type*i.
  • ruleKey == "color" and ruleValue == color*i.
  • ruleKey == "name" and ruleValue == name_i.

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 <= 10^4
  • 1 <= type_i.length, color_i.length, name_i.length, ruleValue.length <= 10
  • ruleKey is equal to either "type", "color", or "name".
  • All strings consist only of lowercase letters.

Solution

Loop over all items. For each item, check whether it matches ruleKey and ruleValue. Count the items that match the rule and return the count.

class Solution {
    public int countMatches(List<List<String>> items, String ruleKey, String ruleValue) {
        int count = 0;
        for (List<String> item : items) {
            String type = item.get(0), color = item.get(1), name = item.get(2);
            if ("type".equals(ruleKey) && type.equals(ruleValue))
                count++;
            else if ("color".equals(ruleKey) && color.equals(ruleValue))
                count++;
            else if ("name".equals(ruleKey) && name.equals(ruleValue))
                count++;
        }
        return count;
    }
}

All Problems

All Solutions