---
# System prepended metadata

title: CSPT13 Hash Tables I

---

# CSPT13 Hash Tables I
## Coding Demo
```
# takes in inputStr and returns a number
def my_hash(inputStr):
    # 'foo' --> [x, y, y]
    sb = inputStr.encode() # the utf-8 bytes for the string
    total = 0
    for b in sb:
        total += b
    return total

print(my_hash('foo'))

my_table = [None] * 8
# store key "foo" w/ value "bar"
hash_index = my_hash("foo") % len(my_table)
my_table[hash_index] = "bar"
# print(my_table)

# get value w/ key "foo"
another_hash_index = my_hash("foo") % len(my_table)
print(my_table[another_hash_index])

# delete value w/ key "foo"
yet_another_hash_index = my_hash("foo") % len(my_table)
my_table[yet_another_hash_index] = None
```

## [Jewels and Stones](https://leetcode.com/problems/jewels-and-stones/)
```
"""
Understand
1. J = "aA", S = "aAAbbbb"
output 3

2. J = "z", S = "ZZ"
output 0

3. J = "z" S = ""
output 0

Plan
brute-force
for each char s in S, see if it's in J
if it is, then increment result else don't increment it

better approach
convert J into a set j
for each char s in S
   if s is in j then increment result
return result
"""

class Solution:
    # J = "aA", S = "aAAbbbb"
    def numJewelsInStones(self, J: str, S: str) -> int:
        j = set(list(J))
        numJewels = 0
        for s in S:
            if s in j:
                numJewels += 1
        return numJewels 
```