题目描述:
Given a string, find the length of the longest substring T that contains at most k distinct characters.
Example 1:
Input: s = "eceba", k = 2 Output: 3 Explanation: T is "ece" which its length is 3.
Example 2:
Input: s = "aa", k = 1 Output: 2 Explanation: T is "aa" which its length is 2.
class Solution {
public:
int lengthOfLongestSubstringKDistinct(string s, int k) {
if(k<=0) return 0;
unordered_map<int,int> count;
int i=0, j=0;
int max_length=INT_MIN;
while(j<s.size())
{
if(count.size()<=k)
{
max_length=max(max_length,j-i);
count[s[j]]++;
j++;
}
while(count.size()>k)
{
count[s[i]]--;
if(count[s[i]]==0) count.erase(s[i]);
i++;
}
}
if(count.size()<=k) max_length=max(max_length,j-i);
return max_length;
}
};
本文介绍了一种算法,用于寻找字符串中包含最多k种不同字符的最长子串。通过使用滑动窗口和哈希表,该算法能有效地解决这一问题。示例包括输入字符串eceba和k=2时,输出为ece,长度为3;输入aa和k=1时,输出为aa,长度为2。
710

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



