题目描述
找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k 。输出 T 的长度。
示例 1:
输入:
s = "aaabb", k = 3
输出:
3
最长子串为 "aaa" ,其中 'a' 重复了 3 次。
示例 2:
输入:
s = "ababbc", k = 2
输出:
5
最长子串为 "ababb" ,其中 'a' 重复了 2 次, 'b' 重复了 3 次。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-with-at-least-k-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
class Solution {
public:
int dfs(string s,int k,int l,int r){
if(r-l+1<k) return 0;
vector<int> times(26);
for(int i=l;i<=r;++i) times[s[i]-'a']++;
while(r-l+1>=k && times[s[l]-'a']<k) ++l;
while(r-l+1>=k && times[s[r]-'a']<k) --r;
for(int i=l;i<=r;++i){
if(times[s[i]-'a']<k){
int left = dfs(s,k,l,i);
int right = dfs(s,k,i+1,r);
return max(left,right);
}
}
return r-l+1;
}
int longestSubstring(string s, int k) {
if(s.length()<1 || k==1) return s.length();
int ans = dfs(s,k,0,s.length()-1);
return ans;
}
};