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.




 from collections import Counter
class Solution:
    def numJewelsInStones(self, jewels: str, stones: str) -> int:

        # s_col = Counter(stones)
        # s = set(jewels)
        # count = 0
        # for j in s:
        #     if j in s_col:
        #         count+= s_col[j]
        # return count

        j_set = set(jewels)
        count = 0
        for s in stones:
            if s in j_set:
                count+=1

        return count

Random Note


From python 3.7 dict guarantees that order will be kept as they inserted, and popitem will use LIFO order but we need FIFO type system. so we need OrderedDict which have popIten(last = T/F) for this req. One thing, next(iter(dict)) will return the first key of the dict