Leetcode第八天之 无重复字符串的最长字串3(滑动窗口)

在这里插入图片描述

滑动窗口

       public static int lengthOfLongestSubstring(String s) {
            if (s==null)
                return 0;
            Set<Character> set=new HashSet<>();
            //窗口长度
            int len=s.length();
            //左右窗口
            int left=0;
            int right=0;
            //最大窗口长度
            int max=0;
            //没超出最大窗口长度时:
            while (left<len){
                //第一次执行,当while中窗口遇到重复字母时,用来删除重复字母用
                if (left!=0){
                    set.remove(s.charAt(left-1));
                }
                //一次性测出当前窗口可扩大的最大长度
                while (right<len&&!set.contains(s.charAt(right))){
                    set.add(s.charAt(right));
                    right++;
                }
                //每一次测试完扩大窗口,都要去跟新最大窗口长度
                max=Math.max(max,right-left);
                //测试用例
                //System.out.println("right:"+right+" left:"+left+" max:"+max);
                //每一次遇到重复元素,都要移动左窗口
                left++;
            }
            return max;
        }

在这里插入图片描述

学以致用

当前题目窗口框架:
右窗口没有走到头时:

  • 1、右窗口一直向前走,直到遇到重复元素
  • 2、此时跟新最大窗口长度
  • 3、左窗口向右移动一个,并且删除当前左窗口对应的Set中元素
  • 4、如果还是有重复元素,继续第三步
  • 5、如果没有重复元素,继续第一步
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值