class Solution {
public:
int numJewelsInStones(string jewels, string stones) {
}
};
771. 宝石与石头
给你一个字符串 jewels
代表石头中宝石的类型,另有一个字符串 stones
代表你拥有的石头。 stones
中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。
字母区分大小写,因此 "a"
和 "A"
是不同类型的石头。
示例 1:
输入:jewels = "aA", stones = "aAAbbbb" 输出:3
示例 2:
输入:jewels = "z", stones = "ZZ" 输出:0
提示:
1 <= jewels.length, stones.length <= 50
jewels
和 stones
仅由英文字母组成jewels
中的所有字符都是 唯一的原站题解
golang 解法, 执行用时: 0 ms, 内存消耗: 1.9 MB, 提交时间: 2023-07-24 09:08:28
func numJewelsInStones(jewels, stones string) (ans int) { // 把 jewels 转换成字符集合 mask mask := 0 for _, c := range jewels { mask |= 1 << (c & 63) } // 统计有多少 stones[i] 在集合 mask 中 for _, c := range stones { ans += mask >> (c & 63) & 1 } return }
java 解法, 执行用时: 0 ms, 内存消耗: 39.8 MB, 提交时间: 2023-07-24 09:08:13
class Solution { public int numJewelsInStones(String jewels, String stones) { // 把 jewels 转换成字符集合 mask long mask = 0; for (char c : jewels.toCharArray()) mask |= 1L << (c & 63); // 统计有多少 stones[i] 在集合 mask 中 int ans = 0; for (char c : stones.toCharArray()) ans += mask >> (c & 63) & 1; return ans; } }
python3 解法, 执行用时: 52 ms, 内存消耗: 15.9 MB, 提交时间: 2023-07-24 09:07:57
# 位运算 class Solution: def numJewelsInStones(self, jewels: str, stones: str) -> int: # 把 jewels 转换成字符集合 mask mask = 0 for c in jewels: mask |= 1 << (ord(c) & 63) # 统计有多少 stones[i] 在集合 mask 中 return sum(mask >> (ord(c) & 63) & 1 for c in stones)
javascript 解法, 执行用时: 48 ms, 内存消耗: 41.5 MB, 提交时间: 2023-07-24 09:06:36
/** * @param {string} J * @param {string} S * @return {number} */ var numJewelsInStones = function(J, S) { const set = new Set(); for(const s of J) { set.add(s); } let ans = 0; for(const s of S) { if(set.has(s)){ ans++; } } return ans; };
java 解法, 执行用时: 1 ms, 内存消耗: 40 MB, 提交时间: 2023-07-24 09:06:21
class Solution { public int numJewelsInStones(String J, String S) { Set<Character> set = new HashSet<>(); for(int i = 0; i < J.length(); i++) { set.add(J.charAt(i)); } int ans = 0; for(int i = 0; i < S.length(); i++) { if(set.contains(S.charAt(i))){ ans++; } } return ans; } }
golang 解法, 执行用时: 0 ms, 内存消耗: 2 MB, 提交时间: 2020-11-14 23:37:45
func numJewelsInStones(J string, S string) int { ans := 0 for _, c := range J { ans += strings.Count(S, string(c)) } return ans }
python3 解法, 执行用时: 40 ms, 内存消耗: 13.6 MB, 提交时间: 2020-11-14 23:26:36
class Solution: def numJewelsInStones(self, J: str, S: str) -> int: return sum([S.count(c) for c in J])