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
Note:
SandJwill consist of letters and have length at most 50.- The characters in
Jare distinct.
[code lang="java"]
class Solution {
public int numJewelsInStones(String J, String S) {
}
}
[code]
Idea – 1
While processing letter c in S, we need to answer “Is c a jewel?” To answer efficiently we use hash set (array based) for all the jewels. Time complexity is
[code lang="java"]
class Solution {
public int numJewelsInStones(String J, String S) {
boolean[] set = new boolean[128];
for(int i = 0; i < J.length(); ++i)
{
int j = J.charAt(i);
set[j] = true;
}
int jewelCount = 0;
for(int i = 0; i < S.length(); ++i)
{
int j = S.charAt(i);
if(set[j])
{
++jewelCount;
}
}
return jewelCount;
}
}
[code]
Runtime: 1 ms, faster than 98.37% of Java online submissions for Jewels and Stones.Memory Usage: 36.8 MB, less than 87.95% of Java online submissions for Jewels and Stones.