public int longestSubstring(String s, int k) {
return findLongestSubstring(s, k, 0, s.length() - 1);
public int findLongestSubstring(String s, int k, int start, int end) {
if (start > end || end - start + 1 < k) {
int[] count = new int[26];
for (int i = start; i <= end; i++) {
++count[s.charAt(i) - 'a'];
for (int i = 0; i < 26; i++) {
if (count[i] > 0 && count[i] < k) {
int index = s.indexOf((char)(i + 'a'), start);
return Math.max(findLongestSubstring(s, k, start, index - 1), findLongestSubstring(s, k, index + 1, end));