class Solution {
public:
int longestSubString(const string &s,int left,int right,int k){
if(right-left+1<k){
return 0;
}
unordered_map<char,int> letters;
for(int i=left;i<=right;++i){
letters[s[i]]++;
}
vector<int> splits; //不满k个字符的元素的下标
for(int i=left;i<=right;++i){
if(letters.count(s[i])&&letters[s[i]]<k){
splits.push_back(i);
}
}
if(splits.size()==0){
return right-left+1;
}
int L=left,R;
int answer=0;
for(int i=0;i<splits.size();++i){
R=splits[i]-1;
answer=max(answer,longestSubString(s,L,R,k));
L=R+2;
}
//还需考虑最后一段
L=R+2,R=right;
answer=max(answer,longestSubString(s,L,R,k));
return answer;
}
int longestSubstring(string s, int k) {
return longestSubString(s,0,s.length()-1,k);
}
};
ノート:
- セット範囲コンストラクター:パラメーターは、次のようなポインターアドレスです
。inta[] = {1,2,3,4,5} set myset(a + 2、a + 4)、mysetは{3,4}