欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【LeetCode-3】3.无重复字符的最长子串

程序员文章站 2022-07-13 21:18:11
...

无重复字符的最长子串

题目描述

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
【LeetCode-3】3.无重复字符的最长子串

滑动窗口+双指针+哈希

修改滑动窗口模板:

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int maxLen = 0;
        
        if(s == null || s.length() == 0) {
            return maxLen;
        }
        
        // 动态更新的匹配窗口字典
        Map<Character, Integer> window = new HashMap<>();
        
        int left = 0, right = 0;
        
        while(right < s.length()) {
            char c = s.charAt(right);
            right++;
            
            // 进行窗口内数据的一系列更新
            window.put(c, window.getOrDefault(c, 0) + 1);
            
            
            //判断左侧窗口是否需要收缩
            //题目要求子串不含重复字符
            while(window.get(c) > 1) {
                
                char d = s.charAt(left);
                left++;
                
                // 进行窗口内数据的一系列更新
                window.put(d, window.get(d) - 1);
            }
            
            //更新maxLen
            maxLen = Math.max(maxLen, right - left);
        }
        return maxLen;
    }
}