美文网首页
3. 无重复字符的最长子串

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

作者: bangbang2 | 来源:发表于2020-08-07 09:20 被阅读0次
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;
    }
}

相关文章

网友评论

      本文标题:3. 无重复字符的最长子串

      本文链接:https://www.haomeiwen.com/subject/pmbxdktx.html