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.先计算字符串里每个字母的个数,若某个字母x的个数小于k,则它一定不在最终的子字符串里。
然后利用分治的思想,以x分割字符串,计算每个子字符串里的Longest Substring。
public class Solution {
public int longestSubstring(String s, int k) {
if(s.length()<k) return 0;
int[] count=new int[26];
String sp=null;
int j=0,max=0;
for(int i=0;i<s.length();i++){
count[s.charAt(i)-'a']++;
}
while(j<count.length&&(count[j]>=k||count[j]==0)) j++;
if(j==count.length) return s.length();
sp=(char)(j+'a')+"";
String[] temp=s.split(sp);
for(String t:temp){
if(t.length()>0)
max=Math.max(max,longestSubstring(t,k));
}
return max;
}
}