003 無重複字元的最長子串

2021-10-21 02:48:53 字數 2029 閱讀 1519

# 定義空列表作為滑動視窗

max_len =

0# 最大長度

count =

0# 滾動統計數

iflen

(s)==1:

# 當字串長度為1

return

1for i in

range

(len

(s))

:# 當字串長度大於1

if max_len

# 內迴圈終止的情況2:沒有碰到重複且遍歷到字串末尾,這時需要進行比較

max_len = count

ls.clear(

)# 當i指標更換時,列表清零,重新計數

count =0)

count +=

1for j in

range

(i+1

,len

(s))

:if s[j]

in ls:

# 內迴圈終止的情況2:碰到重複,這是需要進行比較

if(max_len < count)

: max_len = count

count =

0break

) count +=

1return max_len

class

solution

:def

lengthoflongestsubstring

(self, s:

str)

->

int:

# 雜湊集合,記錄每個字元是否出現過

occ =

set(

) n =

len(s)

# 右指標,初始值為 -1,相當於我們在字串的左邊界的左側,還沒有開始移動

rk, ans =-1

,0for i in

range

(n):

if i !=0:

# 左指標向右移動一格,移除乙個字元

occ.remove(s[i -1]

)while rk +

1< n and s[rk +1]

notin occ:

# 不斷地移動右指標

occ.add(s[rk +1]

) rk +=

1# 第 i 到 rk 個字元是乙個極長的無重複字元子串

ans =

max(ans, rk - i +1)

return ans

class

solution

:def

lengthoflongestsubstring

(self, s:

str)

->

int:

k, res, c_dict =-1

,0,for i, c in

enumerate

(s):

if c in c_dict and c_dict[c]

> k:

# 字元c在字典中 且 上次出現的下標大於當前長度的起始下標

k = c_dict[c]

c_dict[c]

= i else

: c_dict[c]

= i res =

max(res, i-k)

return res

003 無重複字元的最長子串

given a string,find the length of the longest substring without repeating characters.examples given abcabcbb the answer is abc which the length is 3.g...

無重複字元最長子串

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3 ...

無重複字元最長子串

題目描述 給定乙個字串,找出不含有重複字元的 最長子串 的長度。示例 給定 abcabcbb 沒有重複字元的最長子串是 abc 那麼長度就是3。給定 bbbbb 最長的子串就是 b 長度是1。給定 pwwkew 最長子串是 wke 長度是3。請注意答案必須是乙個子串,pwke 是子串行而不是子串 i...