首页 > 其他 > 详细

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

时间:2021-09-01 14:51:51      阅读:15      评论:0      收藏:0      [点我收藏+]

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

示例 :

输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

 

这个题目我们首先就要想到滑动窗口。


class Solution {
    public int lengthOfLongestSubstring(String s) {
        if(s==null || s.length()==0){
            return 0;
        }

        Set<Character> set = new HashSet<>();
        int right=0,res=0;
        
        //for循环,i作为滑动窗口的左指针
        for(int i=0;i<s.length();i++){
            //只要没有重复的字符,并且右指针没有超出长度,则右指针往前滑动,并且将字符加入集合
            while (right<s.length() && !set.contains(s.charAt(right))){
                set.add(s.charAt(right));
                right++;
            }
            //有重复字符时则计算一次长度。
            res = Math.max(res,right-i);
            //有重复字符时左指针往前滑动,并将对应位置的字符从集合中剔除
            if(right<s.length() && set.contains(s.charAt(right))){
                set.remove(s.charAt(i));
            }
        }

        return res;
    }
}

时间复杂度:O(n),左右指针各遍历一次。

空间复杂度:O(n),最大为n个不同字符。

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

原文:https://www.cnblogs.com/daxiaq/p/14682475.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!