Leetcode # 3. Longest Substring Without Repeating Characters
- 2023.08.04
- ★★ Medium LeetCode Sliding Window
https://leetcode.com/problems/longest-substring-without-repeating-characters
Solution: Sliding Window
Time Complexity: O(len(s))
Space Complexity: O(26) = O(1) (26 lowercase letters)
(The input and output generally do not count towards the space complexity.)
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
appeared_c = collections.Counter()
ans = left = 0
for right in range(len(s)):
# do logic here to add arr[right] to curr
appeared_c[s[right]] += 1
while appeared_c[s[right]] > 1:
# remove arr[left] from curr
appeared_c[s[left]] -= 1
left += 1
# update ans
ans = max(ans, right - left + 1)
return ans
Optimized Solution
Time Complexity: O(len(s))
Space Complexity: O(26) = O(1) (26 lowercase letters)
(The input and output generally do not count towards the space complexity.)
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
ans, left, indeces = 0, 0, {}
for right, c in enumerate(s):
# c has appeared in s[left:right + 1]
if c in indeces and left <= indeces[c]:
left = indeces[c] + 1
ans = max(ans, right - left + 1)
indeces[c] = right
return ans
Test 例
s = “abba”
當 right == 3
indeces[“a”] = 1 < left == 2
Last Updated on 2023/09/06 by A1go