###### 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;
}
}
```