題目描述:
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。
示例 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解釋 因為...