题目——对不同字符个数进行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;
}
};
本文介绍了如何使用滑动窗口算法来找到字符串中长度最长且包含k个不同字符的子串。通过双指针技巧,结合哈希表记录字符出现次数,动态调整窗口大小,实现了高效求解。在移动指针过程中,当不同字符数量超过k时,收缩窗口,直至满足条件。此方法在字符串处理和算法设计中具有广泛应用。
540

被折叠的 条评论
为什么被折叠?



