https://leetcode.com/problems/jewels-and-stones/
771. Jewels and Stones
You're given strings jewels representing the types of stones that are jewels, and stones representing the stones you have. Each character in stones is a type of stone you have. You want to know how many of the stones you have are also jewels.
Letters are case sensitive, so "a" is considered a different type of stone from "A".
Example 1:
Input: jewels = "aA", stones = "aAAbbbb"
Output: 3
Example 2:
Input: jewels = "z", stones = "ZZ"
Output: 0
Constraints:
- 1 <= jewels.length, stones.length <= 50
- jewels and stones consist of only English letters.
- All the characters of jewels are unique.
▮ Hash Table
class Solution:
def numJewelsInStones(self, jewels: str, stones: str) -> int:
freqs = {}
count = 0
for s in stones:
if s not in freqs:
freqs[s] = 1
else:
freqs[s] += 1
for j in jewels:
if j in freqs:
count += freqs[j]
return count
class Solution:
def numJewelsInStones(self, jewels: str, stones: str) -> int:
freqs = collections.defaultdict(int)
count = 0
for s in stones:
freqs[s] += 1
print(freqs)
for j in jewels:
count += freqs[j]
return count
▮ using Counter
class Solution:
def numJewelsInStones(self, jewels: str, stones: str) -> int:
# stones 빈도수 계산
freqs = collections.Counter(stones)
count = 0
for j in jewels:
count += freqs[j]
return count
▮ Pythonic
class Solution:
def numJewelsInStones(self, jewels: str, stones: str) -> int:
return sum(s in jewels for s in stones)