LeetCode 2 May Jewels and Stones 宝石和石头判断

Jewels and Stones

You’re given strings J representing the types of stones that are jewels, and S representing the stones you have. Each character in S is a type of stone you have. You want to know how many of the stones you have are also jewels.

The letters in J are guaranteed distinct, and all characters in J and S are letters. Letters are case sensitive, so “a” is considered a different type of stone from “A”.

Example: 1

Input: J = "aA", S = "aAAbbbb"

Output: 3

Example: 2

Input: J = "z", S = "ZZ"

Output: 0

Note:

  • S and J will consist of letters and have length at most 50.
  • The characters in J are distinct.

分析:

该题思路非常简单,下面代码给出两个思路。

  1. 双层循环,时间复杂度$ O(n^2) $:对JS进行两次嵌套循环。判断每一个石头是不是其中的一种宝石。代码为第一段python代码。
  2. 单层循环,时间复杂度为$ O(n) $:将宝石的特征从列表形式转换为字典或集合的数据类型。那么只需要遍历一次石头列表S,将其中的每一个字符进行集合内的查找。既可以计算出一共有多少个宝石。
# Runtime: 28ms, 52ms, 56ms
# Memory Useage: 14.1MB, 13.8MB, 13.7MB
class Solution:
    def numJewelsInStones(self, J: str, S: str) -> int:
        sum = 0
        for c_J in J:
            for c_S in S:
                if c_J == c_S:
                    sum += 1
        return sum
      
# Runtime: 24ms
# Memory Useage: 13.8MB
class Solution:
    def numJewelsInStones(self, J: str, S: str) -> int:
        jewels_type = set()
        num = 0
        for x in J:
            jewels_type.add(x)
        for c in S:
            if c in jewels_type:
                num += 1
        return num
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值