问题描述:
假设我们有两个字符串,J 表示宝石的种类,而 S 表示你手中拥有的各种石头。你的任务是计算在 S 中有多少个石头实际上是宝石。请注意,J 中的所有字符都是唯一的,并且 J 和 S 只包含字母,其中大小写被视为不同的类型。
例如:
示例 1:
输入: J = "aA", S = "aAAbbbb"
输出: 3
示例 2:
输入: J = "z", S = "ZZ"
输出: 0
约束条件:
- S 和 J 的长度均不超过50个字符。
- J 中的字符保证各不相同。
解决方案:
为了高效地解决这个问题,我们可以将 J 转换为一个集合(Set),这样可以在 O(1) 时间内检查一个元素是否存在于集合中。然后遍历 S 中的每一个字符,如果该字符出现在 J 的集合中,则计数器加一。
Java 实现:
```java
class Solution {
public int numJewelsInStones(String J, String S) {
Set set = new HashSet<>();
for (char c : J.toCharArray())
set.add(c);
int count = 0;
for (char c : S.toCharArray())
if (set.contains(c)) count++;
return count;
}
}
```
Python 实现:
```python
class Solution:
def numJewelsInStones(self, J: str, S: str) -> int:
count = 0
hash_set = set(J)
for c in S:
if c in hash_set:
count += 1
return count
```
通过上述方法,我们可以有效地计算出给定石头中宝石的数量。这种算法的时间复杂度主要取决于 S 的长度,通常非常高效,适用于大多数实际应用场景。
更多关于算法和编程的学习资料将会持续更新,敬请关注!