|
1 | 1 | class Solution {
|
2 | 2 | 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); |
19 | 8 | }
|
20 | 9 |
|
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)) { |
24 | 14 | return false;
|
25 | 15 | }
|
26 | 16 | }
|
27 | 17 | return true;
|
28 | 18 | }
|
| 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 | + } |
29 | 27 | }
|
0 commit comments