描述:給一個字符串s,找到它的最長子串(無任何字符重複)substring的長度。spa
舉例:code
Input: "abcabcbb"leetcode
Output: 3字符串
Explanation: The answer is "abc", which the length is 3.input
思路:string
個人作法是從左至右掃描,設repeat[c],記錄字符c上一次在字符串s中出現的位置。假設如今正在掃描s[j]字符,而以前已經記錄s[i,j-1]都未出現任何重複字符。假設檢測到s[j]上一次出現的位置repeat[j]在區間[i,j-1]內,那麼能夠截取子串s[i,j-1]並與當前smax作優選。接着咱們能夠從repeat[j]開始,更新區間爲s[repeat[j]+1,j]並繼續向後掃描處理。it
官方的思路其實跟個人一致,不過敘述上有所差異。它提出了滑動窗口SliddingWindow的概念,而且使用HashSet存儲窗口P[i,j)內的全部未重複字符。當發現s[j]在HashSet中重複時就要動態更新窗口下限i,儘量大地向右滑動。詳見:https://leetcode.com/problems/longest-substring-without-repeating-characters/solution/io