題目:給定乙個字串string,找出string中無重複字元的最長子串。
舉例:given"abcabcbb"
, the answer is"abc"
, which the length is 3.
given"bbbbb"
, the answer is"b"
, with the length of 1.
given"pwwkew"
, the answer is"wke"
, with the length of 3. note that the answer must be asubstring,"pwke"
is a subsequence and not a substring.
思路:首先,因為找的是無重複的子串,因此我們使用hashset結構來存放已經找到的字元,hashset中儲存的是從某個位置pre到另乙個位置i中間的所有字元。
從頭開始遍歷給定的字串s, 每遍歷乙個,判斷hashset中是否有該字元,假設此時遍歷到i位置:
1: 如果沒有,就將字元加入hashset, 表明子串的長度又增大了乙個,即prev~i位置的字串是無重複字元的,更新最長字串的長度max_str;
2: 如果有,就從prev位置開始迴圈遍歷,直到找到與i位置字元相等的那個字元,然後prev指向那個字元位置+1的位置,i繼續遍歷。
直到i==len結束遍歷。但此時還應該計算一次max(i-prev, max_str)的大小,最後一次更新max_str的大小,返回最終的max_str;
擴充套件:假設本題要求找出無重複的最長子串,則需要用兩個變數儲存視窗的左右位置,每當max_str更新的時候,就需要更新此時的視窗左右位置。最終使用s.substring(left, right)獲取最長子串。
本題**:
1public
class
solution
21 pre ++;22}
23else
2427 i++;28}
29 max_str = math.max(max_str, i - pre); //
i一直向後,直到超出s的長度,此時也要計算視窗的大小
30return
max_str;
3132
}33 }
leetcode 3 無重複的字串
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3 ...
leetcode 3 無重複字元的最長字元子串
堅持打卡!題目 給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwk...
leetcode 3 最長無重複字串
3.longest substring without repeating characters 題面 given a string,find the length of the longest substring without repeating characters.給定字串,找到最長無重複字...