3. 无重复字符的最长子串

image.png

第一感觉就是用滑动窗口。但是感觉滑动窗口中每次比较,时间负责度会上升也就是O(m*n),如果内部用hash表本以为可以下降,实际还需要删除相同字符串之前的所有字符串,而且hash计算反而浪费了时间。以下是代码,虽然结果正确,但不值得借鉴。

if(s==null || s!=null && s.length()<=0){
            return 0;
        }
        int maxLength = 0;
        char[] chars = s.toCharArray();
        //key:字符 value下标
        Map<Character,Integer> map = new HashMap<>();
        int start =0;
        for(int i=0;i<chars.length;i++){
            if(map.containsKey(chars[i])){
                int end = map.get(chars[i]);
                //由于是字串,所以map必须删除之前的字符,反而浪费时间
                for(int j=start;j<=end;j++){
                    map.remove(chars[j]);
                }
                start=end+1;
            }
            map.put(chars[i],i);
            maxLength = Math.max(maxLength,i-start+1);
        }
        return maxLength;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容