| 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}
 |