#3325

Count Substrings With K-Frequency Characters I

Medium
Hash TableStringSliding WindowHash MapSliding Window
LeetCode ↗

Approaches

Brute ForceOptimal
Complexity Comparison
Brute ForceOptimal Solution
Time
O(n²)
O(n)
Space
O(1)
O(n)
💡

Intuition

Time O(n)Space O(n)

The optimal solution uses a sliding window technique combined with a frequency map to efficiently count valid substrings. By fixing the left index and expanding the right index, we can quickly determine when a substring meets the k-frequency condition without generating all possible substrings.

⚙️

Algorithm

3 steps
  1. 1Step 1: Initialize a frequency map and two pointers (left and right).
  2. 2Step 2: For each left index, expand the right pointer until the substring has a character with at least k occurrences.
  3. 3Step 3: Count all valid substrings starting from the current left index to the end of the string.
solution.py14 lines
1def countSubstrings(s, k):
2    count = 0
3    n = len(s)
4    for left in range(n):
5        freq = {}
6        valid_count = 0
7        for right in range(left, n):
8            freq[s[right]] = freq.get(s[right], 0) + 1
9            if freq[s[right]] == k:
10                valid_count += 1
11            if valid_count > 0:
12                count += n - right
13                break
14    return count

Complexity note: This complexity is due to the linear traversal of the string with a sliding window approach, where we maintain a frequency map that can grow with the number of unique characters.

  • 1Understanding frequency counts is crucial for solving substring problems.
  • 2Sliding window techniques can significantly optimize the search for valid substrings.

Solutions and explanations are original Tejav content. Problem titles © LeetCode — use the LeetCode button above for the full problem statement.