2023-07-24每日一题
一、题目编号
771. 宝石与石头
二、题目链接
三、题目描述
给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。
字母区分大小写,因此 "a" 和 "A" 是不同类型的石头。
提示:
- 1 <= jewels.length, stones.length <= 50
- jewels 和 stones 仅由英文字母组成
- jewels 中的所有字符都是 唯一的
示例1:
示例2:
四、解题代码
cpp
class Solution {
public:
int numJewelsInStones(string jewels, string stones) {
int cnt=0;
int length1 = jewels.size();
int length2 = stones.size();
for(int i = 0; i < length2; ++i){
for(int j = 0; j < length1; ++j){
if(jewels[j] == stones[i]){
++cnt;
break;
}
}
}
return cnt;
}
};
cpp
class Solution {
unordered_map<char, int> hash1;
public:
int numJewelsInStones(string jewels, string stones) {
int cnt = 0;
int m = jewels.size();
int n = stones.size();
for(int i = 0; i < m; ++i){
hash1[jewels[i]] = 1;
}
for(int i = 0; i < n; ++i){
if(hash1[stones[i]] == 1){
++cnt;
}
}
return cnt;
}
};
五、解题思路
(1) 方法1:直接暴力枚举,利用两层循环,判断stones中的元素是否出现在jewels数组中,出现了就宝石数量加1,不出现就不加1。
(2) 方法2:先遍历一遍jewels数组,用哈希表记录哪些是宝石。再遍历一遍stones数组,如果哈希表中有标记就宝石加1,不出现就不加1.