The challenge I am going to explain is the Jewels and Stones challenge, which, by the way, is a concise one. The description of the problem is as follows:

You’re given strings

`J`

representing the types of stones that are jewels, and`S`

representing the stones you have. Each character in`S`

is a type of stone you have. You want to know how many of the stones you have are also jewels.The letters in

`J`

are guaranteed distinct, and all characters in`J`

and`S`

are letters. Letters are case sensitive, so`"a"`

is considered a different type of stone from`"A"`

.

Example 1:Input:J = "aA", S = "aAAbbbb"Output:3

Example 2:Input:J = "z", S = "ZZ"Output:0

Thus, each jewel from the String J is compared with each stone I have. If the jewel matches the stone I have, it means that I have a jewel. After all the stones are compared, the function returns the number of jewels I have.

class Solution(object): def numJewelsInStones(self, J, S): """ :type J: str :type S: str :rtype: int """ ''' J - types of stones that are jewels (J distinct) S - stones you have Each char in S is a type of stone I have ''' # take each stone from J an check if it is found in S return sum(stone in J for stone in S)

The following line:

return sum(stone in J for stone in S)

Can be restructured as follows:

count = 0 for jewel in J: for stone in S: if jewel == stone: count += 1 return count

For the moment, I prefer the second solution because it is easier for a beginner like me to understand what is happening. Nonetheless, the first solution is more beautiful and quicker.

The statistics for the first code are: