###### tags: `LeetCode`,`Java`,`Medium` # Medium-3. Longest Substring Without Repeating Characters ### **題目連結:** [**Longest Substring Without Repeating Characters**](https://leetcode.com/problems/longest-substring-without-repeating-characters/description/) ### **解題方向** * 題目要求找出最長的不重複字串長度,所以可以使用滑動窗口的方式來處理。 * 使用 Set 紀錄目前窗口中出現過的字元,如果加入的字元已經在 Set 中存在,就從 Set 中移除窗口最左邊的字元,直到該字元不存在 Set 中。 * 用一個變數 max 來記錄目前最長的不重複字串長度,每次更新時計算目前窗口的長度。 * 窗口的左右端點分別使用 left 和 right 來記錄,初始值都為 0。 * 迴圈從右邊端點開始遍歷,每次遍歷時先檢查當前右邊端點所對應的字元是否存在 Set 中,如果存在就移除最左邊的字元,直到該字元不存在 Set 中為止。 * 每次更新 max 的值時,使用 Math.max 函數比較當前 max 的值和目前窗口的長度哪一個更大,然後將較大的值賦給 max 變數。 * 最後返回 max 變數即可。 ### **完整程式碼** ```java= class Solution { public int lengthOfLongestSubstring(String s) { Set<Character> set = new HashSet(); int max = 0; int left = 0; for (int right = 0; right < s.length(); right++) { while(!set.add(s.charAt(right))) { set.remove(s.charAt(left++)); } max = Math.max(max, right - left + 1); } return max; } } ```