|
| 1 | +import java.util.ArrayList; |
| 2 | +import java.util.HashMap; |
| 3 | +import java.util.List; |
| 4 | +import java.util.Map; |
| 5 | + |
| 6 | +public class FindCommonCharacters { |
| 7 | + public List<String> commonChars(String[] words) { |
| 8 | + Map<Character, Integer> commonChars = getCharsFrequency(words[0]); |
| 9 | + Map<Character, Integer> wordChars; |
| 10 | + for (int i = 1 ; i < words.length ; i++) { |
| 11 | + wordChars = getCharsFrequency(words[i]); |
| 12 | + for (char letter : commonChars.keySet()) { |
| 13 | + commonChars.put(letter, Math.min(commonChars.get(letter), wordChars.getOrDefault(letter, 0))); |
| 14 | + } |
| 15 | + } |
| 16 | + return toList(commonChars); |
| 17 | + } |
| 18 | + |
| 19 | + private List<String> toList(Map<Character, Integer> characters) { |
| 20 | + List<String> result = new ArrayList<>(); |
| 21 | + for (Map.Entry<Character, Integer> entry : characters.entrySet()) { |
| 22 | + if (entry.getValue() > 0) { |
| 23 | + for (int i = 0 ; i < entry.getValue() ; i++) result.add(entry.getKey() + ""); |
| 24 | + } |
| 25 | + } |
| 26 | + return result; |
| 27 | + } |
| 28 | + |
| 29 | + private Map<Character, Integer> getCharsFrequency(String string) { |
| 30 | + Map<Character, Integer> result = new HashMap<>(); |
| 31 | + char character; |
| 32 | + for (int index = 0 ; index < string.length() ; index++) { |
| 33 | + character = string.charAt(index); |
| 34 | + result.put(character, result.getOrDefault(character, 0) + 1); |
| 35 | + } |
| 36 | + return result; |
| 37 | + } |
| 38 | +} |
0 commit comments