You're given stringsJrepresenting the types of stones that are jewels, andSrepresenting the stones you have. Each character inSis a type of stone you have. You want to know how many of the stones you have are also jewels.
The letters inJare guaranteed distinct, and all characters inJandSare 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.
Analysis
Use Hash Table - O(M) space, O(N) time, where M is length of J, and N is length of S
Solution
Hash Set - O (N) - (15ms 26.72%)
classSolution {publicintnumJewelsInStones(String J,String S) {if (J ==null||J.length() ==0|| S ==null||S.length() ==0) {return0;}HashSet<Character> jewels =newHashSet<Character>();int count =0;for (int i =0; i <J.length(); i++) {jewels.add(J.charAt(i));}for (int i =0; i <S.length(); i++) {if (jewels.contains(S.charAt(i))) {count++;}}return count;}}
classSolution {publicintnumJewelsInStones(String J,String S) {HashSet set =newHashSet();for (int i =0; i <J.length(); i++) {set.add(J.substring(i,i+1));}int tick =0;for (int i =0; i <S.length(); i++) {String temp =S.substring(i,i+1);if (set.contains(temp)) {tick++;}}return tick;}}
For small input, this might be better solution
publicstaticintnumJewelsInStones(String J,String S) {int res=0;for(char c :S.toCharArray()){if(J.indexOf(c) !=-1){res++;}}return res;}