1. 程式人生 > 其它 >無重複字元的最長子串----java

無重複字元的最長子串----java

給定一個字串 s ,請你找出其中不含有重複字元的最長子串的長度。

示例1:

輸入: s = "abcabcbb"
輸出: 3
解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。
示例 2:

輸入: s = "bbbbb"
輸出: 1
解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。
示例 3:

輸入: s = "pwwkew"
輸出: 3
解釋: 因為無重複字元的最長子串是"wke",所以其長度為 3。
請注意,你的答案必須是 子串 的長度,"pwke"是一個子序列,不是子串。
示例 4:

輸入: s = ""
輸出: 0

來源:力扣(LeetCode)
連結:

https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int left = 0,right = 0,len = s.length(),max = 0;
        Set<Character> window = new HashSet<>();   //新建雜湊表
        while(right < len){ 
            char xinchar = s.charAt(right); 
            while(window.contains(xinchar)){    //判斷right指向的元素是否再window滑動視窗中
                window.remove(s.charAt(left));  //移除left元素
                left++;
            }
            max = Math.max(max,right - left + 1);   //更新長度
            window.add(xinchar);        //新增不再滑動視窗中的元素
            right++;
        }
        return max;
    }
}