每日一题8

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

解题思路:滑动窗口

image-20230302215558531

image-20230302215614078

代码:

class Solution {
    public int lengthOfLongestSubstring(String s) {
        Set<Character> set=new HashSet<Character>();  // 使用HashMap,保证集合里无重复!
        int n=s.length();
        int ptr=-1; //右端点
        int ans=0;
        for(int i=0;i<n;i++){
            if(i!=0){
                set.remove(s.charAt(i-1));   //移除左端点
            }

            while(ptr+1<n && !set.contains(s.charAt(ptr+1)) ){  //如果集合里不包含右端点则把右端点加入集合,端点右移
                set.add(s.charAt(ptr+1));   
                ptr++;
            }
            ans=Math.max(ans,ptr+1-i);  // 记录字符串的最大值
        }
        return ans;
    }
}
posted @ 2023-03-02 22:05  ZLey  阅读(13)  评论(0编辑  收藏  举报