Jewels and Stones
题目
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.
翻译:
简单讲就是,给你一个代表不同宝石的字符串,和一个代表石头的字符串,从石头字符串里找出属于宝石的石头,并返回个数。
注意,区分大小写即a和A不一样。
解答:
1.通过遍历字符串S和J,两两进行比较,判断stone中有多少颗jewel。
- 时间复杂度为O(s * j)。(s为字符串S的长度,j为字符串J的长度)。
- 空间复杂度为O(1)。
java:
class Solution {
public int numJewelsInStones(String J, String S) {
int res = 0;
Set set = new HashSet();
for(char c:J.toCharArray())set.add(c);
for(char s:S.toCharArray())if(set.contains(s))res++;
return res;
}
}
class Solution {
public:
int numJewelsInStones(string J, string S) {
int res = 0;
set<char> setJ(J.begin(), J.end());
for (char s : S) if (setJ.count(s)) res++;
return res;
}
};
c++版本:
class Solution {
public:
int numJewelsInStones(string J, string S) {
int ret =0;
set<char>set;
for(int i = 0;i<J.length();i++)
set.insert(J[i]);
for(int i = 0;i<S.length();i++)
if(set.count(S[i]))
ret++;
return ret;
}
};