Maximum Number of Occurrences of a Substring

Given a string s, return the maximum number of ocurrences of any substring under the following rules:

 

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.

Example 3:

Input: s = "aabcabcab", maxLetters = 2, minSize = 2, maxSize = 3
Output: 3

Example 4:

Input: s = "abcde", maxLetters = 2, minSize = 3, maxSize = 3
Output: 0

 

Constraints:


Solution:

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;
    }
}