[LeetCode] 340. Longest Substring with At Most K Distinct Characters 最多有K个不同字符的最长子串

 

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.

 

这道题是之前那道Longest Substring with At Most Two Distinct Characters的拓展,而且那道题中的解法一和解法二直接将2换成k就行了,具体讲解请参考之前那篇博客:

 

解法一:

复制代码
class Solution {
public:
    int lengthOfLongestSubstringKDistinct(string s, int k) {
        int res = 0, left = 0;
        unordered_map<char, int> m;
        for (int i = 0; i < s.size(); ++i) {
            ++m[s[i]];
            while (m.size() > k) {
                if (--m[s[left]] == 0) m.erase(s[left]);
                ++left;
            }
            res = max(res, i - left + 1);
        }
        return res;
    }
};
复制代码

 

具体讲解请参考之前那篇博客Longest Substring with At Most Two Distinct Characters,参见代码如下:

 

解法二:

复制代码
class Solution {
public:
    int lengthOfLongestSubstringKDistinct(string s, int k) {
        int res = 0, left = 0;
        unordered_map<char, int> m;
        for (int i = 0; i < s.size(); ++i) {
            m[s[i]] = i;
            while (m.size() > k) {
                if (m[s[left]] == left) m.erase(s[left]);
                ++left;
            }
            res = max(res, i - left + 1);
        }
        return res;
    }
};
复制代码

 

类似题目:

Longest Substring with At Most Two Distinct Characters

 

参考资料:

https://leetcode.com/problems/longest-substring-with-at-most-k-distinct-characters/

 

LeetCode All in One 题目讲解汇总(持续更新中...) 

posted @   Grandyang  阅读(27010)  评论(7编辑  收藏  举报
Fork me on GitHub

喜欢请打赏

扫描二维码打赏

Venmo 打赏

点击右上角即可分享
微信分享提示