40
40
41
41
<!-- 这里可写通用的实现逻辑 -->
42
42
43
- 哈希表实现。
43
+ ** 方法一:哈希表或数组**
44
+
45
+ 我们可以先用一个哈希表或数组 $s$ 记录所有宝石的类型。然后遍历所有石头,如果当前石头是宝石,就将答案加一。
46
+
47
+ 时间复杂度 $O(m+n)$。其中 $m$ 和 $n$ 分别是字符串 $jewels$ 和 $stones$ 的长度。
44
48
45
49
<!-- tabs:start -->
46
50
52
56
class Solution :
53
57
def numJewelsInStones (self , jewels : str , stones : str ) -> int :
54
58
s = set (jewels)
55
- return sum ([ 1 for c in stones if c in s] )
59
+ return sum (c in s for c in stones )
56
60
```
57
61
58
62
### ** Java**
@@ -62,15 +66,15 @@ class Solution:
62
66
``` java
63
67
class Solution {
64
68
public int numJewelsInStones (String jewels , String stones ) {
65
- Set< Character > s = new HashSet<> () ;
69
+ int [] s = new int [ 128 ] ;
66
70
for (char c : jewels. toCharArray()) {
67
- s. add(c) ;
71
+ s[c] = 1 ;
68
72
}
69
- int res = 0 ;
73
+ int ans = 0 ;
70
74
for (char c : stones. toCharArray()) {
71
- res += (s . contains(c) ? 1 : 0 ) ;
75
+ ans += s[c] ;
72
76
}
73
- return res ;
77
+ return ans ;
74
78
}
75
79
}
76
80
```
@@ -81,37 +85,44 @@ class Solution {
81
85
class Solution {
82
86
public:
83
87
int numJewelsInStones(string jewels, string stones) {
84
- unordered_set<char > s;
85
- for (char c : jewels) {
86
- s.insert(c);
87
- }
88
- int res = 0;
89
- for (char c : stones) {
90
- res += s.count(c);
91
- }
92
- return res;
88
+ int s[ 128] = {0};
89
+ for (char c : jewels) s[ c] = 1;
90
+ int ans = 0;
91
+ for (char c : stones) ans += s[ c] ;
92
+ return ans;
93
93
}
94
94
};
95
95
```
96
96
97
97
### **Go**
98
98
99
99
```go
100
- func numJewelsInStones(jewels string, stones string) int {
101
- s := make(map[rune]bool )
100
+ func numJewelsInStones(jewels string, stones string) (ans int) {
101
+ s := make([]int, 128 )
102
102
for _, c := range jewels {
103
- s[c] = true
103
+ s[c] = 1
104
104
}
105
- res := 0
106
105
for _, c := range stones {
107
- if s[c] {
108
- res++
109
- }
106
+ ans += s[c]
110
107
}
111
- return res
108
+ return
112
109
}
113
110
```
114
111
112
+ ### ** JavaScript**
113
+
114
+ ``` js
115
+ /**
116
+ * @param {string} jewels
117
+ * @param {string} stones
118
+ * @return {number}
119
+ */
120
+ var numJewelsInStones = function (jewels , stones ) {
121
+ const s = new Set (jewels .split (' ' ));
122
+ return stones .split (' ' ).reduce ((prev , val ) => prev + s .has (val), 0 );
123
+ };
124
+ ```
125
+
115
126
### ** ...**
116
127
117
128
```
0 commit comments