以下为官方思路之一,及本人代码
题目
题意
给你一个字符串 j e w e l s jewels jewels 代表石头中宝石的类型,另有一个字符串 s t o n e s stones stones 代表你拥有的石头。 s t o n e s stones stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。
字母区分大小写,因此 “ a a a” 和 “ A A A” 是不同类型的石头。
示例 1
输入: j e w e l s jewels jewels = = = “ a A aA aA” , s t o n e s , stones ,stones = = = “ a A A b b b b aAAbbbb aAAbbbb”
输出: 3 3 3
示例 2
输入: j e w e l s jewels jewels = = = “ z z z” , s t o n e s , stones ,stones = = = “ Z Z ZZ ZZ”
输出: 0 0 0
提示
- 1 < = j e w e l s . l e n g t h , s t o n e s . l e n g t h < = 50 1 <= jewels.length, stones.length <= 50 1<=jewels.length,stones.length<=50
- j e w e l s jewels jewels 和 s t o n e s stones stones 仅由英文字母组成
- j e w e l s jewels jewels 中的所有字符都是唯一的
官方题解
哈希集合
算法总结
遍历字符串 j e w e l s jewels jewels,使用哈希集合存储其中的字符,然后遍历字符串 s t o n e s stones stones,对于其中的每个字符,如果其在哈希集合中,则是宝石。
复杂度
- 时间复杂度: O ( m + n ) O(m+n) O(m+n),其中 m m m 是字符串 j e w e l s jewels jewels 的长度, n n n 是字符串 s t o n e s stones stones 的长度。遍历字符串 j e w e l s jewels jewels 将其中的字符存储到哈希集合中,时间复杂度是 O ( m ) O(m) O(m),然后遍历字符串 s t o n e s stones stones,对于 s t o n e s stones stones 中的每个字符在 O ( 1 ) O(1) O(1) 的时间内判断当前字符是否是宝石,时间复杂度是 O ( n ) O(n) O(n),因此总时间复杂度是 O ( m + n ) O(m+n) O(m+n)。
- 空间复杂度: O ( m ) O(m) O(m),其中 m m m 是字符串 j e w e l s jewels jewels 的长度。使用哈希集合存储字符串 j e w e l s jewels jewels 中的字符。
本人代码
Java
class Solution {
public int numJewelsInStones(String jewels, String stones) {
Set<Character> map = new HashSet<Character>();
int count = 0;
for (int i = 0; i < jewels.length(); i++) {
map.add(jewels.charAt(i));
}
for (int i = 0; i < stones.length(); i++) {
if (map.contains(stones.charAt(i))) {
count++;
}
}
return count;
}
}
提交结果:通过
- 执行用时: 1 m s 1ms 1ms
- 内存消耗: 38.89 M B 38.89MB 38.89MB