[LeetCode]3. 无重复字符的最长子串(滑动窗口)

题目

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

题解

i,j维护滑动窗口,HashMap存储字符出现过的索引,当出现记录过的字符,更新滑动窗口i边界。
时间复杂度O(n)

代码

class Solution {
    public int lengthOfLongestSubstring(String s) {
        if(s==null){
            return 0;
        }
        HashMap<Character,Integer> map=new HashMap<>();
        int maxLen=0;
        
        for(int i=0,j=0;j<s.length();++j){
            if(map.containsKey(s.charAt(j))){
                i=Math.max(i,map.get(s.charAt(j))+1);
            }
            maxLen=maxLen>j-i+1?maxLen:j-i+1;
            map.put(s.charAt(j),j);
        }
        
        return maxLen;
    }
}

posted on 2019-07-30 20:26  coding_gaga  阅读(195)  评论(0编辑  收藏  举报

导航