class Solution {
public int longestSubstring(String s, int k) {
char[] input = s.toCharArray();
int n = input.length;
int ans = 0;
for (int unique = 1; unique <= 26; unique++) {
int[] cnt = new int[26];
int uniqueCnt = 0;
int charLessThanK = 0;
int l = 0;
for (int r = 0; r < n; r++) {
cnt[input[r] - 'a']++;
//不能用>k
if (cnt[input[r] - 'a'] == k) {
charLessThanK--;
}
// should not use else in case k is 1 (charLessThank should first -- then ++)
if (cnt[input[r] - 'a'] == 1) {
uniqueCnt++;
//注意charLessThanK也得++
charLessThanK++;
}
while (uniqueCnt > unique) {
cnt[input[l] - 'a']--;
// 不能用<k
if (cnt[input[l] - 'a'] == k - 1) {
charLessThanK++;
}
if (cnt[input[l] - 'a'] == 0) {
charLessThanK--;
uniqueCnt--;
}
l++;
}
if (charLessThanK == 0) {
ans = Math.max(ans, r - l + 1);
}
}
}
return ans;
}
}