https://leetcode.com/problems/longest-substring-with-at-least-k-repeating-characters/#/description
类似于二分的做法
找出小于k次出现的字符,然后以该字符二分区间,从而找到最长
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
| public int longestSubstring(String s, int k) { if (s == null || s.length() == 0 || k < 1) { return s.length(); } return f(s, 0, s.length(), k); } public int f(String s, int a, int b, int k) { if (b < a) return 0; if (b - a + 1 < k) return 0; int[] arr = new int[26]; for (int i = a; i < b; i++) { arr[s.charAt(i) - 'a']++; } int len = b - a; for (int i = a; i < b; i++) { if (arr[s.charAt(i) - 'a'] < k && arr[s.charAt(i) - 'a'] > 0) { int left = f(s, i + 1, b, k); int right = f(s, a, i, k); return Math.max(right, left); } } return len; }
|