【滑动窗口】LCR 016. 无重复字符的最长子串

LCR 016. 无重复字符的最长子串

解题思路

  • 窗口内的字符串就是不重复子串
  • 每次遇到新的字符 看看窗口内是否存在该字符 如果存在直接剔除 然后调整窗口左边界
  • 不存在 添加窗口内部 右边界++
class Solution {
    public int lengthOfLongestSubstring(String s) {
        

        if(s.length() <= 1){
            return s.length();
        }

        // 窗口内的字符串就是不重复子串
        // 每次遇到新的字符  看看窗口内是否存在该字符 如果存在直接剔除  然后调整窗口左边界
        // 不存在  添加窗口内部  右边界++


        int res = 1;
        int left = 0;
        int right = 0;

        Set<Character> window = new HashSet<>();

        while(right < s.length()){
            char ch = s.charAt(right);

            // 取出有边界字符  判断窗口内是否存在

            // 一直判断有边界字符  移除左边字符 直到和他冲突的左边界字符被移除为止
            while(window.contains(ch)){
                // 移除字符
                window.remove(s.charAt(left));//移除左边界字符
                left++;
            }

            res = Math.max(res,right - left + 1);


            window.add(ch);
            right++;
            
        }


        return res;





    }
}

你可能感兴趣的:(#,Leetcode,算法,java,数据结构)