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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| public class LongestSubstringAtLeastKRepeating { public int longestSubstring(String s, int k) {
char[] as = s.toCharArray(); return help(as, k, 0, s.length()); } public int help(char[] a, int k, int start, int end){ if (end - start < k) return 0; int[] count = new int[26]; for (int i=start; i<end; i++){ count[a[i]-'a'] += 1; } for (int i=0; i<count.length; i++){ if (count[i]>0 && count[i]<k){ for (int j=start; j<end; j++){ if (a[j] == i+'a'){ int left = help(a, k, start, j); int right = help(a, k, j+1, end); return Math.max(left, right); } } } } return end-start; } }
|