Longest Substring Without Repeating Characters - LeetCode
May 19, 2024
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
longest = 0
start = 0
visited = set()
for end in range(len(s)):
# check if the window is valid (unique), if not, shrink it untile it is valid
while s[end] in visited:
tail = s[start]
visited.remove(tail)
start += 1
visited.add(s[end])
longest = max(end - start + 1, longest)
return longest
time: O(n)
space: O(1) because s has only specific letters
概念:
使用一個sliding window (two pointer)來檢查當前的substring是某有重複
每次回圈移動一格右邊指針,把遇到的字母與他出現的index記錄在hash map裏面,{a:0}
如果遇到的字母在hash map裡面出現過的話,就要縮小window:看現在的左邊指與成hash map裡面那個index +1哪個大,變成那個
每次回圈結束前,如果現在window長度比之前的window長,就更新一個window長度
最後回傳window長度
演算法:
宣告兩個pointer: r
, l
,一開始都是0(指向第一個位置)
宣告一個map,用來存字母上次出現時的index