Skip to content

Commit 217c315

Browse files
solves #2423: Remove Letter To Equalize Frequency in java
1 parent fa30e45 commit 217c315

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -769,7 +769,7 @@
769769
| 2409 | [Count Days Spent Together](https://leetcode.com/problems/count-days-spent-together) | [![Java](assets/java.png)](src/CountDaysSpentTogether.java) | |
770770
| 2413 | [Smallest Even Multiple](https://leetcode.com/problems/smallest-even-multiple) | [![Java](assets/java.png)](src/SmallestEvenMultiple.java) | |
771771
| 2418 | [Sort the People](https://leetcode.com/problems/sort-the-people) | [![Java](assets/java.png)](src/SortThePeople.java) | |
772-
| 2423 | [Remove Letter To Equalize Frequency](https://leetcode.com/problems/remove-letter-to-equalize-frequency) | | |
772+
| 2423 | [Remove Letter To Equalize Frequency](https://leetcode.com/problems/remove-letter-to-equalize-frequency) | [![Java](assets/java.png)](src/RemoveLetterToEqualizeFrequency.java) | |
773773
| 2427 | [Number of Common Factors](https://leetcode.com/problems/number-of-common-factors) | | |
774774
| 2432 | [The Employee That Worked on the Longest Task](https://leetcode.com/problems/the-employee-that-worked-on-the-longest-task) | | |
775775
| 2437 | [Number of Valid Clock Times](https://leetcode.com/problems/number-of-valid-clock-times) | | |
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// https://leetcode.com/problems/remove-letter-to-equalize-frequency
2+
// T: O(|word|)
3+
// S: O(1)
4+
5+
import java.util.HashMap;
6+
import java.util.Iterator;
7+
import java.util.Map;
8+
9+
public class RemoveLetterToEqualizeFrequency {
10+
public boolean equalFrequency(String word) {
11+
final Map<Character, Integer> letterFrequency = getFrequencies(word);
12+
final Map<Integer, Integer> numberFrequency = getFrequencies(letterFrequency.values());
13+
14+
if (letterFrequency.size() == 1) {
15+
return true;
16+
}
17+
18+
if (numberFrequency.size() == 1 && numberFrequency.keySet().iterator().next() == 1) {
19+
return true;
20+
}
21+
22+
if (numberFrequency.size() == 1 || numberFrequency.size() > 2) {
23+
return false;
24+
}
25+
26+
final Iterator<Integer> iterator = numberFrequency.keySet().iterator();
27+
final int first = iterator.next(), second = iterator.next();
28+
final int smallerNum = Math.min(first, second);
29+
final int largerNum = Math.max(first, second);
30+
final int smallerNumFreq = numberFrequency.get(smallerNum);
31+
final int largerNumFreq = numberFrequency.get(largerNum);
32+
33+
return ((largerNum - smallerNum == 1) && largerNumFreq == 1) || (smallerNum == 1 && smallerNumFreq == 1);
34+
}
35+
36+
private Map<Character, Integer> getFrequencies(String string) {
37+
final Map<Character, Integer> result = new HashMap<>();
38+
for (int index = 0 ; index < string.length() ; index++) {
39+
char letter = string.charAt(index);
40+
result.put(letter, result.getOrDefault(letter, 0) + 1);
41+
}
42+
return result;
43+
}
44+
45+
private Map<Integer, Integer> getFrequencies(Iterable<Integer> iterable) {
46+
final Map<Integer, Integer> result = new HashMap<>();
47+
for (int value : iterable) {
48+
result.put(value, result.getOrDefault(value, 0) + 1);
49+
}
50+
return result;
51+
}
52+
}

0 commit comments

Comments
 (0)