【2022-10-29每日一题】1773. 统计匹配检索规则的物品数量[Easy]

2022-10-29
2分钟阅读时长

2022-10-29每日一题:1773. 统计匹配检索规则的物品数量

难度:Easy

标签:数组 、 字符串

给你一个数组 items ,其中 items[i] = [typei, colori, namei] ,描述第 i 件物品的类型、颜色以及名称。

另给你一条由两个字符串 ruleKeyruleValue 表示的检索规则。

如果第 i 件物品能满足下述条件之一,则认为该物品与给定的检索规则 匹配

  • ruleKey == "type"ruleValue == typei
  • ruleKey == "color"ruleValue == colori
  • ruleKey == "name"ruleValue == namei

统计并返回 匹配检索规则的物品数量

 

示例 1:

输入:items = [["phone","blue","pixel"],["computer","silver","lenovo"],["phone","gold","iphone"]], ruleKey = "color", ruleValue = "silver"
输出:1
解释:只有一件物品匹配检索规则,这件物品是 ["computer","silver","lenovo"] 。

示例 2:

输入:items = [["phone","blue","pixel"],["computer","silver","phone"],["phone","gold","iphone"]], ruleKey = "type", ruleValue = "phone"
输出:2
解释:只有两件物品匹配检索规则,这两件物品分别是 ["phone","blue","pixel"] 和 ["phone","gold","iphone"] 。注意,["computer","silver","phone"] 未匹配检索规则。

 

提示:

  • 1 <= items.length <= 104
  • 1 <= typei.length, colori.length, namei.length, ruleValue.length <= 10
  • ruleKey 等于 "type""color""name"
  • 所有字符串仅由小写字母组成

方法一:直接暴力模拟

写法一

func countMatches(items [][]string, ruleKey string, ruleValue string) (ans int) {
    ht := map[string]int{"type": 0, "color": 1, "name": 2}
    for _, item := range items {
        if idx := ht[ruleKey]; item[idx] == ruleValue {
            ans++
        }
    }
    return ans
}

写法二

var ht = map[string]int{"type": 0, "color": 1, "name": 2}
func countMatches(items [][]string, ruleKey string, ruleValue string) (ans int) {
    index := ht[ruleKey]
    for _, item := range items {
        if item[index] == ruleValue {
            ans++
        }
    }
    return ans
}

写法三

func countMatches(items [][]string, ruleKey string, ruleValue string) int {
    ans := 0
    for _, item := range items {
        if ruleKey == "type" && ruleValue == item[0] {
            ans ++
        }
        if ruleKey == "color" && ruleValue == item[1] {
            ans++
        }
        if ruleKey == "name" && ruleValue == item[2] {
            ans++
        }
    }
    return ans 
}

复杂度分析

  • 时间复杂度:O(n),其中 nn 是输入 items 的长度。需要遍历一遍 items。

  • 空间复杂度:O(1),仅消耗常数空间。

LeetCode题库地址