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

在这里插入图片描述

class Solution {
    
    
    public int lengthOfLongestSubstring(String s) {
    
    
        Set<Character> set = new HashSet<>();
        int len = s.length();
        int l = 0;
        int r = 0;
        int ans = 0;

        //滑动窗口可以按照这个套
        while(l < len) {
    
    
            //没有这一个判断运行会超时
            if(ans >= len - 1 - l + 1) {
    
    
                break;
            }

            //右指针移动
            while(r < len && !set.contains(s.charAt(r))) {
    
    
                set.add(s.charAt(r));
                r++;
            }
            //右移完后计算长度
            ans = Math.max(ans, r - 1 - l + 1);

            //左指针移动  因为已经出现重复了  所以要移动左指针
            while(r < len && set.contains(s.charAt(r))) {
    
    
                set.remove(s.charAt(l));
                l++;
            }
        }

        return ans;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45100361/article/details/113662926