Number of Valid Words for Each Puzzle LeetCode solution in Java

1
class Solution {
2

3
public List<Integer> findNumOfValidWords(String[] words, String[] puzzles) {
4

5
Map<Integer, Integer> map = new HashMap<>();
6

7
for (String w : words) {
8
int mask = 0;
9
for (int i = 0; i < w.length(); i++) {
10
mask |= 1 << (w.charAt(i) - 'a');
11
}
12
map.put(mask, map.getOrDefault(mask, 0) + 1);
13
}
14

15
List<Integer> res = new ArrayList<>();
16

17
for (String p : puzzles) {
18
int mask = 0;
19
for (int i = 0; i < p.length(); i++) {
20
mask |= 1 << (p.charAt(i) - 'a');
21
}
22
int c = 0;
23
int sub = mask;
24
int first = 1 << (p.charAt(0) - 'a');
25
while (true) {
26
if ((sub & first) == first && map.containsKey(sub)) {
27
c += map.get(sub);
28
}
29

30
if (sub == 0) break;
31

32
sub = (sub - 1) & mask; // get the next substring
33
}
34

35
res.add(c);
36
}
37

38
return res;
39
}
40
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0