Given a string s and an integer k, return the length of the longest substring ofssuch that the frequency of each character in this substring is greater than or equal tok.
Example 1:
**Input:** s = "aaabb", k = 3
**Output:** 3
**Explanation:** The longest substring is "aaa", as 'a' is repeated 3 times.
Example 2:
**Input:** s = "ababbc", k = 2
**Output:** 5
**Explanation:** The longest substring is "ababb", as 'a' is repeated 2 times and 'b' is repeated 3 times.
Constraints:
1 <= s.length <= 104
s consists of only lowercase English letters.
1 <= k <= 105
ac: divide and conquer
stuck in stackoverflow, be careful about boundary.
classSolution {publicintlongestSubstring(String s,int k) {// edge caseif (s ==null||s.length() ==0|| k <=0) return0;returnhelper(s.toCharArray(),0,s.length(), k); }privateinthelper(char[] chars,int l,int r,int k) {// exitif (l >= r) return0;int[] cnt =newint[26];for (int i = l; i < r; i++) { cnt[chars[i] -'a']++; // count all characters in this substring }for (int i = l; i < r; i++) {if (cnt[chars[i] -'a'] < k) { // meet red flagint left =helper(chars, l, i, k);while (i < r -1&& chars[i] == chars[i+1]) i++;int right =helper(chars, i+1, r, k);returnMath.max(left, right); } }// all frequency >= kreturn r - l; }}/*identify those whose frequency < k, as a red flagif meet them, recursive divide into 2 partsresult will be the longer one if no divide, return the whole length*/