Find the length of the longest substring T of a given string (consists of lowercase letters only) such that every character in T appears no less than k times.
Example 1:
Input: s = "aaabb", k = 3 Output: 3 The longest substring is "aaa", as 'a' is repeated 3 times.
Example 2:
Input: s = "ababbc", k = 2 Output: 5 The longest substring is "ababb", as 'a' is repeated 2 times and 'b' is repeated 3 times.
==============================================================
Code :
class Solution {
private char[] str = null;
private int k = 0;
private int max = 0;
public int longestSubstring(String s, int k) {
if (s.length() < k) return 0;
if (k < 2) return s.length();
this.str = s.toCharArray();
this.k = k;
return resolve(0,s.length());
}
private int resolve(int start,int end){
int[] rec = new int[26];
for (int i = start; i < end; i++)
++rec[str[i]-97];
int p = start;
for (int i = start; i < end; i++)
if (rec[str[i]-97]<k){
max = Math.max(max,resolve(p,i));
p=i+1;
}
if (p==start) return end-start;
return Math.max(max,resolve(p,end));
}
}