返回介绍

solution / 1200-1299 / 1297.Maximum Number of Occurrences of a Substring / README_EN

发布于 2024-06-17 01:03:21 字数 3787 浏览 0 评论 0 收藏 0

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

Solution 1

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文