[LeetCode] Challenge log 771

771. Jewels and Stones

https://leetcode.com/problems/jewels-and-stones/description/

  1. Use hashing to achieve O(n+m).
  2. Use set as a dict without value to save space

You’re given strings J representing the types of stones that are jewels, and S representing the stones you have. Each character in Sis 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:

1
2
Input: J = "aA", S = "aAAbbbb"
Output: 3

Example 2:

1
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.
Soulution:

Both O(1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# use dict
class Solution:
def numJewelsInStones(self, J, S):
"""
:type J: str
:type S: str
:rtype: int
"""
isJew = {}
result = 0
for i in J:
isJew[i] = 1
for i in S:
if i in isJew:
result += 1
return result
1
2
3
4
5
6
7
8
9
# use set
class Solution:
def numJewelsInStones(self, J, S):
"""
:type J: str
:type S: str
:rtype: int
"""
return sum([1 for s in S if s in set(J)])
0%