[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