395. 至少有 K 个重复字符的最长子串
使用滑动窗口来解决
cpp
class Solution {
public:
int longestSubstring(string s, int k) {
// 枚举 所有情况 最多有26个字符 满足大于k
int n = s.size();
int ans = 0;
for(int unique = 1; unique <= 26;++unique)
{
vector<int> nums(26,0);
int start = 0;
int end = 0;
int curUnique = 0;
int curUniqueSumk = 0;
while(end < s.size() && start <= end)
{
if(curUnique <= unique)
{
int idx = s[end] - 'a';
if(nums[idx] == 0){
curUnique++;
}
nums[idx]++;
if(nums[idx] == k)
{
curUniqueSumk++;
}
++end;
}else{
int idx = s[start] - 'a' ;
nums[idx]--;
if(nums[idx] == 0){
curUnique--;
}
if(nums[idx] == k-1)
{
curUniqueSumk--;
}
++start;
}
if(curUnique == unique && curUniqueSumk == unique)
{
ans = max(ans,end - start);
}
}
}
return ans ;
}
};