LeetCode第三题(无重复字符的最长子串)

98 阅读1分钟

滑动窗口(Java)

class Solution {
    public int lengthOfLongestSubstring(String s) {
        if(s.length() == 0){
            return 0;
        }
        HashMap<Character,Integer> map = new HashMap<Character,Integer>();
        int left = 0;//滑动窗口的左边界
        int max = 0;//不含有重复字符的最长子串的长度
        for(int i = 0; i < s.length(); i++){
            if(map.containsKey(s.charAt(i))){
                left = Math.max(left,map.get(s.charAt(i)) + 1);//以abbac为例,便于理解max()
            }
            map.put(s.charAt(i), i);
            max = Math.max(max, i - left + 1);
        }
        return max;
    }
}