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

2021-10-02 03:46:10 字數 1931 閱讀 6058

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。

示例 1:

輸入: 「abcabcbb」

輸出: 3

解釋: 因為無重複字元的最長子串是 「abc」,所以其長度為 3。

示例 2:

輸入: 「bbbbb」

輸出: 1

解釋: 因為無重複字元的最長子串是 「b」,所以其長度為 1。

示例 3:

輸入: 「pwwkew」

輸出: 3

解釋: 因為無重複字元的最長子串是 「wke」,所以其長度為 3。

請注意,你的答案必須是 子串 的長度,「pwke」 是乙個子串行,不是子串。

1.滑動視窗:設定low

lowlo

w,high

high

high

指標,代表滑動視窗起點和終點。設定列表儲存視窗內的元素。遍歷字串,若在此元素不在視窗內則新增,hig

h=hi

gh+1

high=high+1

high=h

igh+

1,若在視窗內則向右移動視窗,low

=low

+1

low=low+1

low=lo

w+1,去除列表最左元素。繼續從失效處遍歷的字串。時間複雜度o(n

2)

o(n^2)

o(n2

)

class

solution

:def

lengthoflongestsubstring

(self, s:

str)

->

int:

res=

ifnot s:

return

0 l=

len(s)

low=

0 high=

0 i=

0max=1

while iif s[i]

notin res:

) high+=

1else

: i=i-

1 res.pop(0)

low+=

1if high-low>

max:

max=high-low

i+=1return

max

1.時間主要消耗在列表查詢中,python中查詢效率set>dict>list,

set和dict都有做雜湊,不出現衝突的話查詢時間複雜度o(1)。

class

solution

:def

lengthoflongestsubstring

(self, s:

str)

->

int:

res=

set()if

not s:

return

0 l=

len(s)

low=

0 high=

0 i=

0max=1

while iif s[i]

notin res:

res.add(s[i]

) high+=

1else

: i=i-

1 res.remove(s[low]

) low+=

1if high-low>

max:

max=high-low

i+=1return

max

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