| 1234567891011121314151617181920212223242526272829303132333435363738 | 
							- func longestSubstring(s string, k int) (max int) {
 
- 	freq, ban := make([]int, 256), make([]bool, 256)
 
- 	for _, r := range s {
 
- 		freq[r]++
 
- 	}
 
- 	cnt := 0
 
- 	for i := 'a'; i <= 'z'; i++ {
 
- 		if 0 < freq[i] && freq[i] < k {
 
- 			cnt++
 
- 			ban[i] = true
 
- 		}
 
- 	}
 
- 	n := len(s)
 
- 	if cnt == 0 { // No rune is forbidden, return n
 
- 		return n
 
- 	}
 
- 	beg := 0
 
- 	for i, r := range s {
 
- 		if ban[r] { // Split s into substrings using forbidden runes, then find the longest
 
- 			if k <= i-beg {
 
- 				max = maxInt(max, longestSubstring(s[beg:i], k))
 
- 			}
 
- 			beg = i + 1
 
- 		}
 
- 	}
 
- 	if k <= n-beg {
 
- 		max = maxInt(max, longestSubstring(s[beg:n], k))
 
- 	}
 
- 	return
 
- }
 
- func maxInt(x, y int) int {
 
- 	if x < y {
 
- 		return y
 
- 	}
 
- 	return x
 
- }
 
 
  |