[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 题目讲解汇总(持续更新中...) 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM