Skip to content

Commit 772e260

Browse files
authored
Update Find Words That Can Be Formed by Characters.java
1 parent 8bfb9b0 commit 772e260

File tree

1 file changed

+17
-19
lines changed

1 file changed

+17
-19
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,27 @@
11
class Solution {
22
public int countCharacters(String[] words, String chars) {
3-
Map<Character, Integer> charFreq = getMap(chars);
4-
int length = 0;
5-
for (String word : words) {
6-
if (canBeFormed(charFreq, getMap(word))) {
7-
length += word.length();
8-
}
9-
}
10-
return length;
11-
}
12-
13-
private Map<Character, Integer> getMap(String s) {
14-
Map<Character, Integer> map = new HashMap<>();
15-
for (char c : s.toCharArray()) {
16-
map.put(c, map.getOrDefault(c, 0) + 1);
17-
}
18-
return map;
3+
Map<Character, Integer> frequency = getFrequencyMap(chars);
4+
return Arrays.stream(words)
5+
.filter(word -> canBeFormed(word, frequency))
6+
.map(word -> word.length())
7+
.reduce(0, Integer::sum);
198
}
209

21-
private boolean canBeFormed(Map<Character, Integer> main, Map<Character, Integer> toBeChecked) {
22-
for (Character key : toBeChecked.keySet()) {
23-
if (main.getOrDefault(key, 0) < toBeChecked.get(key)) {
10+
private boolean canBeFormed(String word, Map<Character, Integer> frequency) {
11+
Map<Character, Integer> wordFrequency = getFrequencyMap(word);
12+
for (Character key : wordFrequency.keySet()) {
13+
if (frequency.getOrDefault(key, 0) < wordFrequency.get(key)) {
2414
return false;
2515
}
2616
}
2717
return true;
2818
}
19+
20+
private Map<Character, Integer> getFrequencyMap(String s) {
21+
Map<Character, Integer> frequency = new HashMap<>();
22+
for (char c : s.toCharArray()) {
23+
frequency.put(c, frequency.getOrDefault(c, 0) + 1);
24+
}
25+
return frequency;
26+
}
2927
}

0 commit comments

Comments
 (0)