|
1 | 1 | class Solution {
|
2 | 2 | public int maxFreq(String s, int maxLetters, int minSize, int maxSize) {
|
3 | 3 | int result = 0;
|
4 |
| - Map<Character, Integer> cMap = new HashMap<>(); |
5 |
| - Map<String, Integer> sMap = new HashMap<>(); |
| 4 | + Map<String, Integer> freq = new HashMap<>(); |
6 | 5 |
|
7 |
| - for (int i = 0, j = 0; j < s.length(); j++) { |
8 |
| - char c = s.charAt(j); |
9 |
| - cMap.put(c, cMap.getOrDefault(c, 0) + 1); |
| 6 | + for (int i = 0; i < s.length() - minSize + 1; i++) { |
| 7 | + String str = s.substring(i, i + minSize); |
10 | 8 |
|
11 |
| - if (j - i + 1 > minSize) { |
12 |
| - char l = s.charAt(i); |
13 |
| - cMap.put(l, cMap.get(l) - 1); |
| 9 | + if (isValid(str, maxLetters)) { |
| 10 | + freq.put(str, freq.getOrDefault(str, 0) + 1); |
| 11 | + result = Math.max(result, freq.get(str)); |
| 12 | + } |
| 13 | + } |
14 | 14 |
|
15 |
| - if (cMap.get(l) == 0) { |
16 |
| - cMap.remove(l); |
17 |
| - } |
| 15 | + return result; |
| 16 | + } |
18 | 17 |
|
19 |
| - ++i; |
20 |
| - } |
| 18 | + private boolean isValid(String s, int maxLetters) { |
| 19 | + Set<Character> set = new HashSet<>(); |
21 | 20 |
|
22 |
| - if (j - i + 1 >= minSize && cMap.size() <= maxLetters) { |
23 |
| - String str = s.substring(i, j + 1); |
24 |
| - sMap.put(str, sMap.getOrDefault(str, 0) + 1); |
25 |
| - result = Math.max(result, sMap.get(str)); |
26 |
| - } |
| 21 | + for (char c : s.toCharArray()) { |
| 22 | + set.add(c); |
27 | 23 | }
|
28 | 24 |
|
29 |
| - return result; |
| 25 | + return set.size() <= maxLetters; |
30 | 26 | }
|
31 | 27 | }
|
0 commit comments