题目
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:
S and J will consist of letters and have length at most 50.
The characters in J are distinct.
思路
问题抽象为:找S中包含有几个J中的字符;
1.取出J中所有不同的字符全部放到set中;
2.遍历S中的字符,如果在map1中则num++;
3.return num
代码
java
public int numJewelsInStones(String J, String S) {
int num = 0;
Set<Character> set = new HashSet<Character>();
for (int i = 0; i< J.length(); i++) {
set.add(J.charAt(i));
}
for (int i = 0; i< S.length(); i++) {
if (set.contains(S.charAt(i))) {
num++;
}
}
return num;
}
python
def numJewelsInStones(self, J, S):
"""
:type J: str
:type S: str
:rtype: int
"""
#定义一个set,存放J中不同的字符
s1 = set()
num = 0
for j in J :
s1.add(j)
for s in S :
if s in s1 :
num = num + 1
return num
C++
int numJewelsInStones(string J, string S) {
int num = 0;
std::set<char> s1;
for (int i = 0; i < J.size(); i++) {
s1.insert(J[i]);
}
for (int i = 0; i< S.size(); i++) {
if (s1.find(S[i]) != s1.end()) {
num++;
}
}
return num;
}