LeetCode 3 無重複字元的最長子串

2022-03-26 04:27:14 字數 1463 閱讀 1157

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.給定字串,找到最長無重複字...