目录
一.题目
1.题目详情
给你一个数组 items
,其中 items[i] = [typei, colori, namei]
,描述第 i
件物品的类型、颜色以及名称。
另给你一条由两个字符串 ruleKey
和 ruleValue
表示的检索规则。
如果第 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"] 。
二.解题思路
1.利用hashmap将我们需要的数组索引与题目会给的值进行关联
2.获取到ruleKey对应的索引存到index
3.这时候我们只需要遍历出List中数组对应index值与ruleKey是否相等就完成了
三.代码
class Solution {
public int countMatches(List<List<String>> items, String ruleKey, String ruleValue) {
Map<String,Integer> map = new HashMap();//利用hashmap将type\coor\name与我们需要的编号0、1、2
map.put("type",0);map.put("color",1);map.put("name",2);
int index = map.get(ruleKey);//或取相应字符串对应的编号
int sount=0;
for(List<String> item:items)//遍历items并获取里面数组对应index的值与ruleValue比较
if(item.get(index).equals(ruleValue))sount+=1;
return sount;
}
}
四.题后语(
)
这道题拿到的时候,我第一时间看到List<List<String>>是想用两个遍历来获取结果,第一个遍历来获取对应的ruleKey,第二个遍历来获取对应的ruleKey,就可以得到结果。然后我到api里面找看看有没有能直接获取到list字段的方法,结果是没有。就在不知道怎么办的时候,突然反应过来,这个items好像是--items[item{"xxx","yyy","zzz"},item{"xxx","yyy","zzz"},item{"xxx","yyy","zzz"}]--这样的一个结构,好像没有题目给的“type,color,name"字段,在数组里面已经是一个具体的值了。再细读题目,那么ruleKey,就是用来看这个对应的是item中第几个值的Sting,但遍历item需要的是int型的数据,那么怎么样才能将两种数据类型进行关联,我就想到了用HashMap与下标关联,这样,程序拿到ruleKey时,先到Map里面找到对应的index,然后再将index带到循环里面取遍历就可以解决了。