题目——对不同字符个数进行k的限定
思路
- 利用双指针实现滑动窗口
- 滑动窗口对不同字母进行计数
- 移动右指针
- 当不同字符个数大于k 移动左指针
- 如何统计不同字符的个数?——哈希表的size 当出现次数为0进行删除
代码
class Solution {
public:
int longestSubstring(string s, int k) {
unordered_map<char, int> win;
int l = 0, r = -1, len = 0;
while (r<int(s.length()-1)) {
++win[s[++r]];//右指针移动
while (win.size() >k && l <= r) {//左指针移动
len = len<r - l?r-l:len;
--win[s[l]];
if (win[s[l]] == 0) win.erase(s[l]);
l++;
}
}
return r - l + 1 > len ? r - l + 1 : len;
}
};