Given a string s, return the maximum number of ocurrences of any substring under the following rules:
The number of unique characters in the substring must be less than or equal to maxLetters.
The substring size must be between minSize and maxSize inclusive.
Example 1:
Input: s = "aababcaab", maxLetters = 2, minSize = 3, maxSize = 4
Output: 2
Explanation: Substring "aab" has 2 ocurrences in the original string.
It satisfies the conditions, 2 unique letters and size 3 (between minSize and maxSize).
Example 2:
Input: s = "aaaa", maxLetters = 1, minSize = 3, maxSize = 3
Output: 2
Explanation: Substring "aaa" occur 2 times in the string. It can overlap.
class Solution {
public int maxFreq(String s, int maxLetters, int minSize, int maxSize) {
int left = 0, right = 0, n = s.length(), count = 0, res = 0;
int[] map = new int[26];
Map<String, Integer> freq = new HashMap();
while (right < n) {
char in = s.charAt(right);
map[in - 'a'] ++;
if (map[in - 'a'] == 1) count ++;
if (right - left + 1 > minSize) {
char out = s.charAt(left);
map[out - 'a'] --;
if (map[out - 'a'] == 0) count --;
left ++;
}
if (count <= maxLetters && right - left + 1 == minSize) {
String sub = s.substring(left, right + 1);
// System.out.println(sub);
freq.putIfAbsent(sub, 0);
freq.put(sub, freq.get(sub) + 1);
res = Math.max(res, freq.get(sub));
}
right ++;
}
return res;
}
}