From Unreliable Macaque, 1 Week ago, written in Text.
Embed
  1.  
  2. def longestSubstring(s, M):
  3.     C = {}
  4.     n = len(s)
  5.     i = j = m = 0
  6.     while 1:
  7.         while j < n:
  8.             k = s[j]
  9.             if k in C:
  10.                 C[k] += 1
  11.             elif len(C) < M:
  12.                 C[k] = 1
  13.             else:
  14.                 break
  15.             j += 1
  16.  
  17.         if len(C) < M:
  18.             return m
  19.  
  20.         m = max(m, j-i)
  21.  
  22.         k = s[i]
  23.         C[k] -= 1
  24.         if C[k] < 1:
  25.             del C[k]
  26.         i += 1
  27.