跳至主要內容

0771. 宝石与石头

ITCharge大约 1 分钟

0771. 宝石与石头open in new window

  • 标签:哈希表、字符串
  • 难度:简单

题目链接

题目大意

描述:给定一个字符串 jewelsjewels 代表石头中宝石的类型,再给定一个字符串 stonesstones 代表你拥有的石头。stonesstones 中每个字符代表了一种你拥有的石头的类型。

要求:计算出拥有的石头中有多少是宝石。

说明

  • 字母区分大小写,因此 aaAA 是不同类型的石头。
  • 1jewels.length,stones.length501 \le jewels.length, stones.length \le 50
  • jewelsjewelsstonesstones 仅由英文字母组成。
  • jewelsjewels 中的所有字符都是唯一的。

示例

  • 示例 1:
输入:jewels = "aA", stones = "aAAbbbb"
输出:3
  • 示例 2:
输入:jewels = "z", stones = "ZZ"
输出:0

解题思路

思路 1:哈希表

  1. countcount 来维护石头中的宝石个数。
  2. 先使用哈希表或者集合存储宝石。
  3. 再遍历数组 stonesstones,并统计每块石头是否在哈希表中或集合中。
    1. 如果当前石头在哈希表或集合中,则令 countcount11
    2. 如果当前石头不在哈希表或集合中,则不统计。
  4. 最后返回 countcount

思路 1:代码

class Solution:
    def numJewelsInStones(self, jewels: str, stones: str) -> int:
        jewel_dict = dict()
        for jewel in jewels:
            jewel_dict[jewel] = 1
        count = 0
        for stone in stones:
            if stone in jewel_dict:
                count += 1
        return count

思路 1:复杂度分析

  • 时间复杂度O(m+n)O(m + n),其中 mm 是字符串 jewelsjewels 的长度,nnstonesstones 的长度。
  • 空间复杂度O(m)O(m),其中 mm 是字符串 jewelsjewels 的长度。