educative.io

Educative

Simpler Python solution with sets

def longest_substring_with_k_distinct(str1, k):
  max_len = 0
  start = 0

  for idx in range(0, len(str1)):
    unique_chars = len(set(str1[start:idx]))
    substr_len = len(str1[start:idx])
    while unique_chars > k:
      start += 1
      unique_chars = len(set(str1[start:idx]))
      substr_len = len(str1[start:idx])
    
    max_len = max(substr_len, max_len)
  return max_len

Yes, the solution you provided is correct. We can use a different approach to solve a problem.