difficulty:中等
給定乙個字串,請你找出其中不含有重複字元的 **最長子串 **的長度。
示例 1:
輸入: s = "abcabcbb"
輸出: 3
解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。
示例 2:
輸入: s = "bbbbb"
輸出: 1
解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。
示例 3:
輸入: s = "pwwkew"
輸出: 3
解釋: 因為無重複字元的最長子串是 "wke",所以其長度為 3。
請注意,你的答案必須是 子串 的長度,"pwke" 是乙個子串行,不是子串。
示例 4:
輸入: s = ""
輸出: 0
solution
遇到字串求長度的題目首先想到使用hashmap和雙指標,題目要求計算給定字串中無重複字串子串的最大長度,讀起來有點繞,簡單來說就是乙個給定的字串有很多子串(子串是連續的),然後要求這些沒有重複字元的子串的最大長度。比如wke就是"pwwkew"的乙個子串,並且沒有重複字元,長度為3。
首先,我們需要乙個hashmap用於記錄子串字元的起始位置,如果後續的字元ch
出現在hashmap中,那麼子串字元的起始位置需要更新為ch
上一次出現的位置的後乙個位置,並且起始位置是需要一直往右邊移動,不能往回走。比如,abba
,當指標指向最後乙個字元a
的時候,此時的起始位置就不能是d[ch]+1=1
了,而是max(start, d[ch] + 1)
。下面以abba
為例:
istart
dres00
1102
2223
22
class solution:
def lengthoflongestsubstring(self, s: str) -> int:
if not s:
return 0
d, res, start = {}, 1, 0
for i, ch in enumerate(s):
if ch in d:
start = max(start, d[ch] + 1)
res = max(res, i - start + 1)
d[ch] = i
return res
參考: 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.給定字串,找到最長無重複字...