3. [数组][滑动窗口]无重复字符的最长子串

Posted suphxlin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3. [数组][滑动窗口]无重复字符的最长子串相关的知识,希望对你有一定的参考价值。

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

方法一:滑动窗口

(slideEnd(滑动窗口的右侧))每次只需要从上次的位置继续开始后移即可,因为如果在([i, slideEnd])之间没有重复的字符,那么在([i+1, slideEnd])之间也不会有重复的字符串。

在判断是否出现重复字符时可以改用Set判断,因为子串不含重复字符,正好满足Set的特性,可以使用HashSet减少查询开销,当然,可以进一步优化为使用布尔数组用于字符是否出现的记录。

// 执行耗时:3 ms,击败了96.75% 的Java用户
// 内存消耗:38 MB,击败了99.80% 的Java用户

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int maxLength = 0;
        int slideEnd = 0;
        boolean isAppear[] = new boolean[128];
        for (int i = 0; i < s.length(); i++){
            while (slideEnd < s.length() && !isAppear[s.charAt(slideEnd)]){
                isAppear[s.charAt(slideEnd)] = true;
                slideEnd++;
            }
            maxLength = Math.max(maxLength, slideEnd - i);
            isAppear[s.charAt(i)] = false;
        }
        return maxLength;
    }
}

以上是关于3. [数组][滑动窗口]无重复字符的最长子串的主要内容,如果未能解决你的问题,请参考以下文章

力扣笔记----滑动窗口 3. 无重复字符的最长子串 209. 长度最小的子数组

力扣笔记----滑动窗口 3. 无重复字符的最长子串 209. 长度最小的子数组

力扣笔记----滑动窗口 3. 无重复字符的最长子串 209. 长度最小的子数组

leetcode 3. 无重复字符的最长子串----滑动窗口篇1,双指针篇1

滑动窗口:无重复字符的最长子串

无重复字符的最长子串——滑动窗口法?