滑动窗口---字符串的无重复最长子串

1.题目

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

 

2.思路

思路:滑动窗口

 

例子:”abcbbcbb”

start和end初始为0.

初始化set,里面存放满足滑动窗口的字符。条件是:在start到end这个窗口中不能有重复的字符。

结果用r表示,初始化为0

end=0,a不在set中,将a加入到set,扩大窗口,end++,此时start=0,end=1,set=a。r=max(r, end-satrt)=1.

end=1,b不在set中,将b加入到set,扩大窗口,end++,此时start=0,end=2,set=a,b。r=max(r, end-start) = 2.

end=2,c不在set中,将c加入到set,扩大窗口,end++,此时start=0,end=3,set=a,b,c。r=max(r, end-start) = 3;

end=3,b在set中,将s.chartAt(start)为a从set中移除,缩小窗口,start++,此时start=1,end=3,set=b,c。r=max(r, end-start) = 3;

end=3,b还在set中,将s.charAt(start)为b从set中移除,缩小窗口,start++,此时start=2,end=3,set=c。r=max(r, end-satrt)=3

end=3,b不在set中,将b加入到set,扩大窗口,end++,此时start=2,end=4,set=c,b

end=4,b在set中,将s.chartAt(start)为c从set中移除,缩小窗口,start++,此时start=3,end=4,set=b。r=max(r, end-satrt)=3

end=4,b在set中,将s.chatAt(start)为b从set中移除,缩小窗口,start++,此时start=4,end=4,set=null。r=max(r, end-satrt)=3

end=4,b不在set中,将b加入到set,扩大窗口,end++,此时start=4,end=5,set=b。r=max(r, end-satrt)=3

end=5,c不在set中,将c加入到set,扩大窗口,end++,此时start=4,end=6,set=b,c。r=max(r, end-satrt)=3.

end=6,b在set中,将s.charAt(start)为b从set中移除,缩小窗口,start++,此时start=5,end=6,set=c。r=max(r, end-satrt)=3

end=6,b不在set中,将b加入到set中,扩大窗口,end++,此时start=5,end=7,set=c,b。r=max(r, end-satrt)=3

end=7,b在set中,将s.charAt(start)为c从set中移除,缩小窗口,start++,此时start=6,end=7,set=b。r=max(r, end-satrt)=3

end=7,b在set中,将s.charAt(start)为b从set中移除,缩小窗口,start++,此时start=7,end=7.set=null。r=max(r, end-satrt)=3

end=7,b不在set中,将b加入到set中,扩大窗口,end++,此时start=7,end=8,set=b。r=max(r, end-satrt)=3

此时end=8 > 字符串长度。退出。

 

最后结果为3。

 

 

 

 

 

3.代码

public int lengthOfLongestSubStr(String s) {
        if(s == null) {return 0;}
        int start = 0, end = 0;
        int res = 0;
        HashSet set = new HashSet();
        while(start < s.length() && end < s.length()) {
            if(!set.contains(s.charAt(end))) {
                set.add(s.charAt(end++));
                res = max(res, end -start);
            }else {
                set.remove(s.charAt(start++));
            }
        }
        return res;

    }

 

posted @ 2021-02-05 16:46  yq055783  阅读(80)  评论(0编辑  收藏  举报