1. 程式人生 > >滑動窗口算法

滑動窗口算法

sts lang 算法 set 註意 remove move i++ bcb

滑動窗口這種解題思路在平常的應用中很常見。

描述

給定一個字符串,找出不含有重復字符的最長子串的長度。

示例:

給定 "abcabcbb" ,沒有重復字符的最長子串是 "abc" ,那麽長度就是3。

給定 "bbbbb" ,最長的子串就是 "b" ,長度是1。

給定 "pwwkew" ,最長子串是 "wke" ,長度是3。請註意答案必須是一個子串,"pwke" 是 子序列 而不是子串。

解題思路

 public int lengthOfLongestSubstring(String s) {
       int n = s.length();
        Set<Character> set = new HashSet<>();
        int ans = 0, i = 0, j = 0;
        while (i < n && j < n) {
            // try to extend the range [i, j]
            if (!set.contains(s.charAt(j))){
                set.add(s.charAt(j++));
                ans = Math.max(ans, j - i);
            }
            else {
                set.remove(s.charAt(i++));
            }
        }
        return ans;
    }

滑動窗口算法