问题
给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求该子串中的每一字符出现次数都不少于 k 。返回这一子串的长度。
思路
模仿快排思路,使用哈希表和分治思想。
代码
class Solution {
public:
int longestSubstring(string s, int k) {
// 模仿快排思路,进行一次划分,分两部分
if(s.size()<k)
return 0;
unordered_map<char,int> mp;
for(char ch:s)
mp[ch]++;
for(int i=0;i<s.size();i++){
if(mp[s[i]]<k){
int a=0;
int b=0;
if(i>0)
a=longestSubstring(s.substr(0,i),k);
while(i<s.size()&&mp[s[i]]<k) i++;
b=longestSubstring(s.substr(i),k);
return max(a,b);
}
}
return s.size();
}
};