跳到主要内容

771.宝石与石头

链接:771.宝石与石头
难度:Easy
标签:哈希表、字符串
简介:给定字符串 J 代表石头中宝石的类型,和字符串 S 代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。

题解 1 - typescript

  • 编辑时间:2020-10-02
  • 执行用时:92ms
  • 内存消耗:39.9MB
  • 编程语言:typescript
  • 解法介绍:利用哈希储存值。
function numJewelsInStones(J: string, S: string): number {
const cache: Record<string, number> = {};
const setCache = (c: string) => (cache[c] = cache[c] ? cache[c] + 1 : 1);
const getCache = (c: string) => (cache[c] ? cache[c] : 0);
for (const c of S) setCache(c);
let sum = 0;
for (const c of J) sum += getCache(c);
return sum;
}

题解 2 - cpp

  • 编辑时间:2023-07-24
  • 内存消耗:6.1MB
  • 编程语言:cpp
  • 解法介绍:遍历。
class Solution {
public:
int numJewelsInStones(string jewels, string stones) {
bool list[200] = {0};
for (auto &o : jewels) list[o] = true;
int sum = 0;
for (auto &c : stones) {
if (list[c]) sum++;
}
return sum;
}
};

题解 3 - python

  • 编辑时间:2023-07-24
  • 执行用时:36ms
  • 内存消耗:16MB
  • 编程语言:python
  • 解法介绍:同上。
class Solution:
def numJewelsInStones(self, jewels: str, stones: str) -> int:
s = set(jewels)
return sum(o in s for o in stones)

题解 4 - rust

  • 编辑时间:2023-07-24
  • 内存消耗:1.9MB
  • 编程语言:rust
  • 解法介绍:同上。
impl Solution {
pub fn num_jewels_in_stones(jewels: String, stones: String) -> i32 {
let mut list = [false; 200];
for c in jewels.bytes() {
list[c as usize] = true;
}
stones
.bytes()
.into_iter()
.filter(|c| list[*c as usize])
.collect::<Vec<_>>()
.len() as i32
}
}