題目
輸入一個字串 s,要找出最長的不含重複字元的子字串長度。
例子:
- s = “
abcabcbb
” → 答案是 3 (“abc”) - s = “
bbbbb
” → 答案是 1 (“b”) - s = “
pwwkew
” → 答案是 3 (“wke”)
Sliding Window
上圖是大概的 Sliding Window 概念,用 set()
去重,並且用兩個指標 l
和 r
來表示目前的子字串範圍,然後不斷地擴展 r
直到遇到重複字元,就移動 l
指標來縮小子字串範圍,將重複字元去除
1 | class Solution: |
charSet 表示「從 i 到 j 之間,沒有重複字元的子字串」,其實也就是 = r - l + 1
,相同意思,只是我用 len(charSet)
我自己認為更直觀點
- Time Complexity:
O(n)
- Space Complexity:
O(m)
Brute Force
如果 s[j]
的字串已出現過在 charSet 裡面,就跳出 for j in range
迴圈,回到 for i in range
迴圈,重新創建 charSet
並記錄目前 charSet 的最大長度,每輪更新 max_unique_str_length
1 | class Solution: |
- Time Complexity:
O(n * m)
- Space Complexity:
O(m)
若您覺得這篇文章對您有幫助,歡迎分享出去讓更多人看到⊂◉‿◉つ~
留言版