3. 無重複字元的最長子串
3. 無重複字元的最長子串
題目
給定一個字串,請你找出其中不含有重複字元的 最長子串 的長度。
示例 1:
輸入: "abcabcbb"
輸出: 3
解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。
示例 3:
輸入: "pwwkew"
輸出: 3
解釋: 因為無重複字元的最長子串是 "wke",所以其長度為 3。
請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。
解法1–爬動視窗(因為沒有滑動起來)
用set儲存已經用過的字元,每當新進來的字元是已經存在了的,就重置起點,重置set,重新開始.
因為沒有滑動視窗的流暢,就暫時叫做爬動視窗吧.
def lengthOfLongestSubstring(s: str) -> int:
max_len = start = end = 0
value_set = set()
while end < len(s):
if s[end] in value_set:
start += 1
end = start
value_set.clear()
value_set.add(s[end])
end += 1
target = end-start
if target > max_len:
max_len = target
return max_len
解法2–滑動視窗(因為沒有滑動起來)
因為發生重複時不需要收縮視窗大小為0,只需要到達沒有重複的狀態就行了,所以可以把起始位置逐步前移,直到沒有重複元素.
def lengthOfLongestSubstring2(s: str) -> int:
max_len = start = end = 0
value_set = set()
while end < len(s):
if s[end] in value_set:
value_set.remove(s[start])
start += 1
continue
value_set.add(s[end])
end += 1
target = end-start
if target > max_len:
max_len = target
return max_len
Python學到了
11.python的set
集合(set)是一個無序的不重複元素序列。
可以使用大括號 { } 或者 set() 函式建立集合,注意:建立一個空集合必須用 set() 而不是 { },因為 { } 是用來建立一個空字典。
set的底層是通過雜湊表實現的.
判斷元素是否在表中一是看hash值是否已存在,二是看兩個值是否真的相等.
相關文章
- Leetcode 3. 無重複字元的最長子串LeetCode字元
- 無重複字元的最長子串字元
- 每日leetcode——3. 無重複字元的最長子串LeetCode字元
- java無重複字元的最長子串Java字元
- 3 無重複字元的最長子串字元
- [LeetCode 刷題] 3. 無重複字元的最長子串 (Medium)LeetCode字元
- LeetCode——無重複字元的最長子串LeetCode字元
- 演算法-無重複字元的最長子串演算法字元
- leetcode 之無重複字元的最長子串LeetCode字元
- 【LeetCode】3 無重複字元的最長子串LeetCode字元
- 【leetcode】【java】【3、無重複字元的最長子串】LeetCodeJava字元
- leetcode-3無重複字元的最長子串LeetCode字元
- LeetCode-3. 無重複字元的最長子串LeetCode字元
- Leetcode[字串] 3. 無重複字元的最長子串 10行極簡寫法!LeetCode字串字元
- Leetcode 3.無重複字元的最長子串 字典記錄每個字元最後出現的位置LeetCode字元
- LCR 016. 無重複字元的最長子串(中)字元
- 求字串中不含重複字元的最長子串字串字元
- 無重複字元的最長子串問題 (移動視窗法求解)字元
- 滑動視窗3.替換後最長重複字元子串字元
- #leetcode刷題之路3-無重複字元的最長子串LeetCode字元
- 每天一道演算法題:無重複字元的最長子串演算法字元
- 讓我們一起啃演算法----無重複字元的最長子串演算法字元
- [LeetCode] Longest Substring Without Repeating Characters 最長無重複字元的子串LeetCode字元
- 最長不含重複字元的子字串字元字串
- LeetCode133:給定一個字串,找出最長的不具有重複字元的子串的長度。例如,“abcabcbb”不具有重複字元的最長子串是“abc”,長度為3。對於“bbbbb”,最長的不具有重複字元的子串是LeetCode字串字元
- 【Leetcode】3. Longest Substring Without RepeatingCharacters無重最長子串LeetCodeGC
- LeetCode3:Longest Substring Without Repeating Characters(無重複字元的最長子串)LeetCode字元
- leetcode 解題 3. 無重複字元的最長子串-python3@ 官方,暴力解法和視窗滑動解法LeetCode字元Python
- 用滑動視窗來解決最長無重複子串問題
- 用 PHP 在 力扣 上演算法 [無重複字元的最長子串]{一天一更}PHP力扣演算法字元
- Leet Code 3. Longest Substring Without Repeating Characters (最長的沒有重複字元的子字串)字元字串
- JZ-073-最長不含重複字元的子字串字元字串
- 劍指 Offer 48. 最長不含重複字元的子字串字元字串
- (字串雜湊表)找到字串中不重複出現字元的最長子串長度字串字元
- 最長子串
- SPOJ 687. Repeats(字尾陣列求最長重複子串)陣列
- 演算法練習:求字串的最長重複子串(Java實現)演算法字串Java
- leetcode無重複字元的最長字串 python實現LeetCode字元字串Python