You're given strings J
representing the types of stones that are jewels, and S
representing the stones you have. Each character inS
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"
.function 1:
Example 1:
Input: J = "aA", S = "aAAbbbb" Output: 3
Example 2:
Input: J = "z", S = "ZZ" Output: 0
Note:
S
andJ
will consist of letters and have length at most 50.
- The characters in
J
are distinct.
function 1:
First, read J
and build jewels hash set.
Second, read S
and count jewels.
I used hash set so that the time complexity will be O(M+N), instead of O(MN)
class Solution {
public int numJewelsInStones(String J, String S) {
int sum=0;
HashSet<Character> hs = new HashSet<Character>();
for(char j : J.toCharArray()){
hs.add(j);
}
for(char s : S.toCharArray()){
if(hs.contains(s))
sum++;
}
return sum;
}
}
function 2:
Author By StefanPochmann
class Solution {
public int numJewelsInStones(String J, String S) {
//利用正则表达式,把S中非J内容去除,replaceAlll()方法,再返回长度
return S.replaceAll("[^"+J+"]","").length();
}
}