LeetCode——至多包含 K 個不同字符的最長子串


Q:定一個字符串 s ,找出 至多 包含 k 個不同字符的最長子串 T。

示例 1:
輸入: s = "eceba", k = 2
輸出: 3
解釋: 則 T 為 "ece",所以長度為 3。
示例 2:
輸入: s = "aa", k = 1
輸出: 2
解釋: 則 T 為 "aa",所以長度為 2。

A:滑動窗口

    public int lengthOfLongestSubstringKDistinct(String s, int k) {
        if (k == 0 || s.length() == 0) {
            return 0;
        }
        int maxLength = 0;
        int left = 0, right = 0;
        HashMap<Character, Integer> cMap = new HashMap<>();
        while (right < s.length()) {
            char r = s.charAt(right);
            cMap.put(r, cMap.getOrDefault(r, 0) + 1);
            if (cMap.keySet().size() <= k) {
                maxLength = Math.max(maxLength, right - left + 1);
            } else {
                while (left != right) {
                    char l = s.charAt(left++);
                    int lNum = cMap.get(l) - 1;
                    if (lNum == 0) {
                        cMap.remove(l);
                        break;
                    } else {
                        cMap.put(l, lNum);
                    }
                }
            }
            right++;
        }
        return maxLength;
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM