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.
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:
1 <= s.length <= 10^5
1 <= maxLetters <= 26
1 <= minSize <= maxSize <= min(26, s.length)
s only contains lowercase English letters.
from collections import defaultdict
class Solution:
    def maxFreq(self, s: str, maxLetters: int, minSize: int, maxSize: int) -> int:
        subCt = defaultdict(int)
        currS = defaultdict(int)
        mx = 0
        l = 0
        r = 0
        
       
        while l < len(s) - minSize:
            length = r - l + 1
           
            if length > minSize:
                currS[s[l]] -= 1
                if currS[s[l]] <= 0:
                    del currS[s[l]]
                    
                l += 1
                
            c = (r == len(s) - 1) and (l < len(s) - minSize)
           
            if c:
                print('eer')
                currS[s[l]] -= 1
                if currS[s[l]] <= 0:
                    del currS[s[l]]
                    
                l += 1
            
            currC = s[r]
            currS[currC] += 1
            
            condition =  (r - l + 1) >= minSize and len(list(currS.keys())) <= maxLetters
            if condition:
                sub = s[l:r+1]
                print(sub)
                subCt[sub] += 1
                
                if subCt[sub] > mx:
                    mx = subCt[sub]
            
            if r < len(s) - 1:
                r += 1
            
        return mx
            

from collections import defaultdict
class Solution:
    def maxFreq(self, s: str, maxLetters: int, minSize: int, maxSize: int) -> int:
        subCt = defaultdict(int)
        currS = defaultdict(int)
        mx = 0
        l = 0
        r = 0
        
       
        while l < len(s) - minSize:
            length = r - l + 1
           
            if length > minSize:
                currS[s[l]] -= 1
                if currS[s[l]] <= 0:
                    del currS[s[l]]
                    
                l += 1
                
            c = (r == len(s) - 1) and (l < len(s) - minSize)
           
            if c:
                print('eer')
                currS[s[l]] -= 1
                if currS[s[l]] <= 0:
                    del currS[s[l]]
                    
                l += 1
            
            currC = s[r]
            currS[currC] += 1
            
            condition =  (r - l + 1) >= minSize and len(list(currS.keys())) <= maxLetters
            if condition:
                sub = s[l:r+1]
                print(sub)
                subCt[sub] += 1
                
                if subCt[sub] > mx:
                    mx = subCt[sub]
            
            if r < len(s) - 1:
                r += 1
            
        return mx
            
