给你一个字符串 s 和一个整数 k ,请你找出 至多 包含 k 个 不同 字符的最长子串,并返回该子串的长度。
示例 1:
输入:s = “eceba”, k = 2
输出:3
解释:满足题目要求的子串是 “ece” ,长度为 3 。
示例 2:
输入:s = “aa”, k = 1
输出:2
解释:满足题目要求的子串是 “aa” ,长度为 2 。
提示:
1 <= s.length <= 5 * 104
0 <= k <= 50
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-substring-with-at-most-k-distinct-characters
方法一:滑动窗口+哈希表
C++提交内容:
class Solution {
public:
int lengthOfLongestSubstringKDistinct(string s, int k) {
unordered_map<char,int> map;
if(k==0){return 0;}
int n = s.size();
int ans =0;
for(int l=0,r=0;r<n;r++){
map[s[r]]++;
while(map.size()>k){
map[s[l]]--;
if(map[s[l]]==0){map.erase(s[l]);}
l++;
}
ans = max(ans,r-l+1);
}
return ans;
}
};