滑動窗口算法
阿新 • • 發佈:2018-07-19
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; }
滑動窗口算法