LeetCode——至多包含 K 個不同字元的最長子串
阿新 • • 發佈:2020-08-02
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; }