3.Longest Substring Without Repeating Characters

    import java.util.Map;
    import java.util.HashMap;
    //维持最大字符不重复的滑动窗口
    public int lengthOfLongestSubstring(String s) {
        if(null==s || s.length() == 0) return 0;
        Map<Character,Integer> map = new HashMap<Character,Integer>();
        char[] chars = s.toCharArray();
        int longest = 1;
        int left = 0;
        for(int i = 0; i < chars.length; i++){
            //例如abcab,当窗口左右边界为left=0和i=3时,窗口右边界为a在窗口内,为了维持
            //窗口内没有重复字符,那么左边界必须把前面字符a(下标为0)给移出去以致不与新加入的字         
            // 符a(下标为3)重复,那么窗口左边界为前面字符a(下标为0)的下一个字符
            //map.get(chars[i]) + 1
            if(map.containsKey(chars[i]) && map.get(chars[i]) >= left){
                left= map.get(chars[i]) + 1;    
            }
            map.put(chars[i], i);
            longest = Math.max(longest, i - left+ 1); 
        }
        return longest;
    }

猜你喜欢

转载自blog.csdn.net/STU756/article/details/81677176
今日推荐