Welcome to Subscribe On Youtube

1297. Maximum Number of Occurrences of a Substring

Description

Given a string s, return the maximum number of occurrences 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 occurrences 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. 

 

Constraints:

  • 1 <= s.length <= 105
  • 1 <= maxLetters <= 26
  • 1 <= minSize <= maxSize <= min(26, s.length)
  • s consists of only lowercase English letters.

Solutions

  • class Solution { public int maxFreq(String s, int maxLetters, int minSize, int maxSize) { int ans = 0; Map<String, Integer> cnt = new HashMap<>(); for (int i = 0; i < s.length() - minSize + 1; ++i) { String t = s.substring(i, i + minSize); Set<Character> ss = new HashSet<>(); for (int j = 0; j < minSize; ++j) { ss.add(t.charAt(j)); } if (ss.size() <= maxLetters) { cnt.put(t, cnt.getOrDefault(t, 0) + 1); ans = Math.max(ans, cnt.get(t)); } } return ans; } } 
  • class Solution { public: int maxFreq(string s, int maxLetters, int minSize, int maxSize) { int ans = 0; unordered_map<string, int> cnt; for (int i = 0; i < s.size() - minSize + 1; ++i) { string t = s.substr(i, minSize); unordered_set<char> ss(t.begin(), t.end()); if (ss.size() <= maxLetters) { ans = max(ans, ++cnt[t]); } } return ans; } }; 
  • class Solution: def maxFreq(self, s: str, maxLetters: int, minSize: int, maxSize: int) -> int: ans = 0 cnt = Counter() for i in range(len(s) - minSize + 1): t = s[i : i + minSize] ss = set(t) if len(ss) <= maxLetters: cnt[t] += 1 ans = max(ans, cnt[t]) return ans 
  • func maxFreq(s string, maxLetters int, minSize int, maxSize int) (ans int) { cnt := map[string]int{} for i := 0; i < len(s)-minSize+1; i++ { t := s[i : i+minSize] ss := map[rune]bool{} for _, c := range t { ss[c] = true } if len(ss) <= maxLetters { cnt[t]++ if ans < cnt[t] { ans = cnt[t] } } } return } 
  • function maxFreq(s: string, maxLetters: number, minSize: number, maxSize: number): number { const cnt = new Map<string, number>(); let ans = 0; for (let i = 0; i < s.length - minSize + 1; ++i) { const t = s.slice(i, i + minSize); const ss = new Set(t.split('')); if (ss.size <= maxLetters) { cnt.set(t, (cnt.get(t) || 0) + 1); ans = Math.max(ans, cnt.get(t)!); } } return ans; } 

All Problems

All Solutions