力扣-771题(Java)
发布日期:2021-05-10 02:26:20 浏览次数:14 分类:精选文章

本文共 1057 字,大约阅读时间需要 3 分钟。

问题描述:

提供两个字符串,一个代表宝石(jewels),一个代表石头(stones),要求统计出在石头中可以看出宝石形态的数量。例如,如果石头中有"ABCD"石头包含"A"作为宝石,"BCA"包含"B"和"A"宝石,那么总共有多少宝石?

解决思路:

为了精确地解决这个问题,我们可以通过以下步骤来完成:

步骤一:使用哈希表记录宝石类型

首先,我们可以创建一个哈希表(或字典),用于记录我们在遍历石头过程中遇到的宝石类型。这样可以快速查找石头中包含的宝石形态。

步骤二:遍历每个石头

对于每一个石头,我们需要检查它是否包含我们哈希表中已有的任何一个宝石类型。如果有,我们增加计数器的值。

步骤三:统计所有宝石形态

对于每个石头,我们遍历其字符,检查是否有属于我们哈希表里宝石类型的字符。如果有,就记录下来,并在最后给总数量加一。

代码实现:

class Solution { public int numJewelsInStones(String jewels, String stones) { int num = 0; // 创建一个哈希表来存储遇到的宝石类型 Hashtable<Character, Integer> jewelTypes = new Hashtable<>();

// 遍历每一个宝石类型
for (char c : jewels.toCharArray()) {
jewelTypes.put(c, 1);
}
// 遍历每一个石头
for (String stone : stones.split("")) {
// 检查当前石头是否包含已在哈希表中的宝石类型
for (char c : stone.toCharArray()) {
if (jewelTypes.containsKey(c)) {
num++;
}
}
}
return num;
}

}

解释:

这个算法首先通过遍历 "jewels" 字符串,将所有宝石类型存储在哈希表中。接着,对于每一个石头,我们检查其中的每一个字符,如果该字符存在于哈希表中,则认为这个石头包含该宝石类型,我们就增加计数器。最后,计数器的总值即为石头中可以看出宝石形态的总数量。这种方法通过使用哈希表来快速查找宝石类型,确保了算法的高效性。

上一篇:Java练习中的渣渣小点子,只给自己看的
下一篇:力扣-1480题(Java)

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月29日 01时53分58秒