LeetCode3. 无重复字符的最长子串(java实现)

今天分享的题目是LeetCode3. 无重复字符的最长子串,来看题目描述:
在这里插入图片描述
无重复的最长子串,题目有可能有些小伙伴没读太懂,其实就是找到不重复的最长子串,比如eg3,pwwk,那么w出现了两次就不符合要求。
解题思路:滑动窗口+Set集合。
在这里插入图片描述
定义左右指针,让右指针进行滑动,滑动之前先对set集合进行判断,看是否出现过,如果没有出现再往set集合里放。如果出现过了那么需要先进行删除原来出现过的也就是左指针的位置,再往set集合中放。
实现的代码如下:

public int lengthOfLongestSubstring(String s) {
        Set<Object> strings = new HashSet<>();
        int left = 0;
        int len = 0;
        int maxlen = 0;
        int right =0;
        while (right<s.length()){
            if (!strings.contains(s.charAt(right))){
                strings.add(s.charAt(right));
                len++;
                if (len>maxlen){
                    maxlen=len;
                }
                right++;
            }else {
                while (strings.contains(s.charAt(right))){
                    strings.remove(s.charAt(left));
                    left++;
                    len--;
                }
                //直至不包含了
                strings.add(s.charAt(right));
                right++;
                len++;

            }
        }
        return maxlen;


    }

需要注意的是对set集合已经包含了元素的处理,需要用一个while循环一直删除重复的元素,然后跳出循环后需要对右指针的元素添加。
如果说没有看太懂的话推荐下b站的博主:[https://www.bilibili.com/video/BV113411v7Ak/?spm_id_from=333.337.search-card.all.click&vd_source=676b214f47ae14dd73164e90955d4dc0]
今天的算法就分享到这里了,如果觉得对你有帮助希望给个小小的3连。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值