1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| func longestSubstring(s string, k int) int { if len(s) < k { return 0 } var cnt = make(map[rune]int) for _, v := range s { cnt[v]++ }
var pivot rune for ch, v := range cnt { if v < k { pivot = ch break } } if pivot == 0 { return len(s) } var l int for _, ss := range strings.Split(s, string(pivot)) { l = max(l, longestSubstring(ss, k)) } return l }
func max(a, b int) int { if a > b { return a } return b }
|