Leetcode
模板
题解
3. 无重复字符的最长子串

这一题比较简单,但是容易和其它题混淆。需要注意以下几点:
- 使用一个
HashMap记录窗口内各个字符出现次数。 - 指针
right不断向右移动,每移动一个字符,就更新该字符在窗口中的次数+1。 - 收缩窗口时机:当前正在被添加的字符次数
>1时,需要收缩窗口,直到该字符在窗口出现次数=1,停止收缩窗口。 计算
maxLen,此时整个窗口的状态就是没有重复字符的状态,可以计算maxLen。class Solution {public int lengthOfLongestSubstring(String s) {if (s == null || s.length() == 0) return 0;int left = 0, right = 0, maxLen = 0;Map<Character, Integer> windows = new HashMap<>();while (right < s.length()) {char add = s.charAt(right);right++;windows.put(add, windows.getOrDefault(add, 0) + 1);while (windows.get(add) > 1) {char remove = s.charAt(left);windows.put(remove, windows.get(remove) - 1);left++;}if (right - left > maxLen) {maxLen = right - left;}}return maxLen;}}
