VOOZH about

URL: https://www.geeksforgeeks.org/dsa/longest-substring-where-all-the-characters-appear-at-least-k-times-set-3/

⇱ Longest substring where all the characters appear at least K times | Set 3 - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Longest substring where all the characters appear at least K times | Set 3

Last Updated : 23 Jul, 2025

Given a string str and an integer K, the task is to find the length of the longest substring S such that every character in S appears at least K times.

Examples:

Input: str = “aabbba”, K = 3
Output: 6
Explanation: In substring "aabbba", each character repeats at least k times and its length is 6.

Input: str = “ababacb”, K = 3
Output: 0
Explanation: There is no substring where each character repeats at least k times.

Naive Approach: The simplest approach to solve the given problem is discussed in Set 1
Time Complexity: O(N2)
Auxiliary Space: O(26)

Divide and Conquer Approach: The divide and conquer approach for the given problem is discussed in the Set 2
Time Complexity: O(N*log N)
Auxiliary Space: O(26)

Efficient Approach: The above two approaches can be optimized further by using Sliding Window technique. Follow the steps below to solve the problem:

  • Store the number of unique characters in the string str in a variable, say unique.
  • Initialize an array freq[] of size 26 with {0} and store the frequency of each character in this array.
  • Iterate over the range [1, unique] using the variable curr_unique. In each iteration, curr_unique is the maximum number of unique characters that must be present in the window.
    • Reinitialize the array freq[] with {0} to store the frequency of each character in this window.
    • Initialize start and end as 0, to store the starting and the ending point of the window respectively.
    • Use two variables cnt, for storing the number of unique characters and countK, for storing the number of characters with at least K repeating characters in the current window.
    • Now, iterate a loop while end < N, and perform the following:
      • If the value of cnt is less than or equals to curr_unique, then expand the window from the right by adding a character to the end of the window. And increment its frequency by 1 in freq[].
      • Otherwise, reduce the window from the left by removing a character from start and decrementing its frequency by 1 in freq[].
      • At every step, update the values of cnt and countK.
      • If the value of cnt is same as curr_unique and each character occurs at least K times, then update the overall maximum length and store it in ans.
  • After completing the above steps, print the value of ans as the result.

Below is the implementation of the above approach:


Output
6

Time Complexity: O(N)
Auxiliary Space: O(1) 

Comment