题目链接:
https://leetcode.cn/problems/jewels-and-stones/
方案一:
解题思路:
jewels
和stones
都是字符串,仅由英文字母组成- 在计算石头中是否含有宝石时,还要区分大小写(a 和 A 不同)
- 所以可以将
jewels
字符串转成HashSet<Byte>
来存储 遍历
stones
每个字符时也转换成Byte
并判断是否包含在宝石的 Set 结构中解题代码:
class Solution {
public int numJewelsInStones(String jewels, String stones) {
HashSet<Byte> jewelsSet = new HashSet<>();
for (Byte j : jewels.getBytes()) {
jewelsSet.add(j);
}
int count = 0;
for (Byte stone : stones.getBytes()) {
if (jewelsSet.contains(stone)) {
count++;
}
}
return count;
}
}
运行结果:
复杂度分析:
时间复杂度:O(n),代码中出现了 2 次循环,以
stones
为较大基数来计算- 空间复杂度:O(n),代码中将
jewels
转换成了HashSet<Byte>
来存储引发的思考:
这是许久以来刷的第一道算法题,从方案一的运行结果来看,这可能并不是最优解(空间复杂度应该还能优化),不过当我拿到这个题目时,方案一的解题思路是最自然想到的
感悟:看似是一道很简单的算法题,但是如果没有经过较多的练习,亦或是没有见过/练过那些最优解,可能真的不容易想到最优解;所以,作为程序员,还是要多动手、多练、多思考才是正道;加油~