无重复字符的最长子串-滑动窗口

56 阅读1分钟
// 无重复字符的最长子串-滑动窗口  
// 输入: s = "abcabcbb"  
// 输出: 3  
// 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。  
public static int lengthOfLongestSubstring(String s){  
    if(s.length()==0)return 0;  
    HashMap<Character, Integer> map = new HashMap<Character, Integer>();  
    int max=0;  
    int left=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));  
        }  
        map.put(s.charAt(i),i);  
        max=Math.max(max,i-left+1);  
    }  
    return max;  
}