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

image.png

主要用到了滑动窗口算法
两个指针之间就代表是一个滑动窗口,滑动窗口必须保证没有重复元素,同时保留最大的滑动窗口的大小
利用set数据结构,来验证是不是有重复元素
1:遍历字符数组,如果s.charAt(i)在set中未出现,则将其加入set,并更新maxLength
2:如果s.charAt(i)在set中出现,则进入一个while循环,循环的结束条件是set中不包括s.charAt(i),在循环中,删除第j个字符,j++,直到把set中之前与s.charAt(i)相等的元素删除,然后在set中加入s.charAt(i)。
while循环主要是去删除已经重复的元素,因为是有顺序的,所以得一个一个的删除


image.png

看代码:

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int j=0;
        int maxLength=0;
        Set set=new HashSet();
        if(s.length()==0) return 0;
        for(int i=0;i<s.length();i++){
            if(!set.contains(s.charAt(i))){
                set.add(s.charAt(i));
                maxLength=Math.max(maxLength,set.size());
            }else {
                while(set.contains(s.charAt(i))){
                    set.remove(s.charAt(j));
                    j++;
                }
            }
            set.add(s.charAt(i));
        }
         return maxLength;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。