새소식

자료구조&알고리즘/자료구조

[HashTable] LeetCode: 771. Jewels and Stones

  • -

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

 

771Jewels 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)
728x90
Contents