题意:找出最长的含k个不同字符的子串的长度。
思路:windows slide
class Solution {
public:
int lengthOfLongestSubstringKDistinct(string s, int k) {
if(k < 1) return 0;
vector<int> alpha(128, 0);
int b = 0, e = 0;
int lengthMax = 0;
while(true) {
if(check(alpha, k)) { //cout << e << " " << b << endl;
lengthMax = max(lengthMax, e - b);
if(e < s.length()) alpha[s[e]] ++;
else break;
e ++;
}
else {
alpha[s[b]] --;
b ++;
}
}
return lengthMax;
}
private:
bool check(vector<int> alpha, int k) {
int count = 0;
for(int i = 0; i < alpha.size(); ++ i) {
if(alpha[i] != 0) count ++;
}
return count <= k;
}
};