LeetCode 771. 宝石与石头
在本篇博客中,我们将探讨如何解决 LeetCode 上的第 771 题——宝石与石头。这个问题涉及到字符串的处理和集合的使用,是一个典型的编程问题,适合初学者练习。
解题思路
解决这个问题的关键在于如何高效地检查 stones
中的每个字符是否在 jewels
中。我们可以通过以下步骤来实现:
-
使用集合存储宝石类型:首先,将
jewels
中的所有字符存储在一个集合中,这样可以在 O(1) 时间内检查一个字符是否是宝石。 -
遍历石头类型:然后,遍历
stones
中的每个字符,检查它是否在宝石集合中。 -
计数:如果一个字符是宝石,就增加计数器。
代码实现
#include <string>
#include <unordered_set>
class Solution {
public:
int numJewelsInStones(string jewels, string stones) {
std::unordered_set<char> jewelSet;
// 将宝石类型存储在集合中
for (char c : jewels) {
jewelSet.insert(c);
}
int count = 0;
// 遍历石头类型,检查是否是宝石
for (char s : stones) {
if (jewelSet.count(s)) {
count++;
}
}
return count;
}
};
代码解释
-
初始化集合:我们首先创建一个
unordered_set
来存储jewels
中的所有字符。这样可以快速检查一个字符是否存在于集合中。 -
遍历石头:然后,我们遍历
stones
中的每个字符,并使用count
方法检查它是否在宝石集合中。 -
计数:如果一个字符是宝石,我们就增加计数器
count
。
总结
通过使用集合来存储宝石类型,我们可以高效地解决这个问题。这种方法不仅简洁,而且运行效率高,适合处理大量数据。希望这篇博客对你有所帮助!