分治 递归
每次递归:
统计每个字符的出现次数 存入freq[]
遍历每一个字符,遇到freq < k的就把字符串拆分成左右两边分别求解,取max
比如 aaabbbcdddefff
对于c拆分 -> aaabbb, dddefff
aaabbb会直接return 6,
dddefff继续对e拆分 -> ddd, fff
...
...
import java.util.*;
public class Solution {
public int longestSubstring (String s, int k) {
return lss(s, k);
}
int lss(String s, int k) {
if (s.length() == 0 || s.length() < k) return 0;
int[] freq = new int[26];
for (int i = 0; i < s.length(); i++) {
freq[s.charAt(i) -'a']++;
}
for (int i = 0; i < s.length(); i++) {
if (freq[s.charAt(i) -'a'] < k) {
return Math.max(
lss(s.substring(0, i), k),
lss(s.substring(i+1, s.length()), k));
}
}
return s.length();
}
}