# Challenge name: 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.
#
# Approach 1: Brute Force
#
# Time Complexity: O(n^2)
#
def find_jewels(jewels, stones)
jewels_array = jewels.split('')
stones_array = stones.split('')
result = 0
jewels_array.each do |jewel|
stones_array.each do |stone|
if jewel == stone
result += 1
end
end
end
result
end
puts find_jewels("aA", "aAAbbbb")
# => 3
puts find_jewels("z", "ZZ")
# => 0
#
# Approach 2: Hash
#
# Time Complexity: O(n)
#
def find_jewels(jewels, stones)
jewels_array = jewels.split('')
stones_array = stones.split('')
result_hash = {}
result = 0
stones_array.each do |stone|
if result_hash[stone]
result_hash[stone] += 1
else
result_hash[stone] = 1
end
end
jewels_array.each do |jewel|
if result_hash[jewel]
result += result_hash[jewel]
else
result
end
end
result
end
puts find_jewels("aA", "aAAbbbb")
# => 3
puts find_jewels("z", "ZZ")
# => 0