3 無重複字元的最長子串

2021-09-27 01:42:02 字數 2929 閱讀 1346

題目描述:

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

示例 1:

輸入: 「abcabcbb」

輸出: 3

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

知識點:

滑動視窗法

列表作為視窗

佇列作為視窗

思路和**:

1列表作為視窗

def

lengthoflongestsubstring

(s):

ifnot s:

return

0 max_len_str =

# 滑動視窗字元容器列表

temp_max_list =

# 最大視窗長度值記錄列表

temp_max =

0# 最大視窗長度

for c in s:

if c in max_len_str:

# 視窗出現重複字元

# 將字元加入視窗

# 記錄此時視窗長度

pop_num = max_len_str.index(c)+1

# 計算需刪除的字元個數

for i in

range

(pop_num)

:# 刪除重複字元及其前面的字元

max_len_str.pop(0)

temp_max = temp_max -

(pop_num-1)

# 更新視窗長度

else

:# 無重複字元

# 將字元加入視窗

temp_max +=

1# 更新視窗長度

return

max(temp_max_list)

2佇列作為視窗

class

node()

:def

__init__

(self,value,

next

=none):

self.val=value

self.

next

=next

class

myqueue()

:def

__init__

(self)

: self.head=

none

self.rear=

none

self.

len=

0def

enqueue

(self,v)

: node = node(v)

self.

len+=

1if self.rear:

self.rear.

next

=node

self.rear=node

else

: self.rear=node

self.head=node

defdequeue

(self)

:if self.head:

self.head=self.head.

next

self.

len-=

1else

:print

('queue is empty'

)def

length

(self)

:return self.

lendef

check

(self,v)

: check_node = self.head

flag =

false

index =

0while check_node:

if check_node.val != v:

check_node=check_node.

next

index+=

1else

: flag=

true

break

return

(flag,index)

class

solution

:def

lengthoflongestsubstring

(self, s:

str)

->

int:

ifnot s:

return

0 max_len_str = myqueue(

)# 滑動視窗字元容器列表

temp_max_list =

# 最大視窗長度值記錄列表

temp_max =

0# 最大視窗長度

for c in s:

flag,indx=max_len_str.check(c)

if flag:

# 視窗出現重複字元

max_len_str.enqueue(c)

# 將字元加入視窗

# 記錄此時視窗長度

for i in

range

(indx+1)

:# 刪除重複字元及其前面的字元

max_len_str.dequeue(

) temp_max = temp_max - indx # 更新視窗長度

else

:# 無重複字元

max_len_str.enqueue(c)

# 將字元加入視窗

temp_max +=

1# 更新視窗長度

return

max(temp_max_list)

3 無重複字元的最長子串

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

3 無重複字元的最長子串

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

3 無重複字元的最長子串

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