diff --git a/work/Medium/Hash Table/3.longest-substring-without-repeating-characters.py b/work/Medium/Hash Table/3.longest-substring-without-repeating-characters.py new file mode 100644 index 0000000..0013fac --- /dev/null +++ b/work/Medium/Hash Table/3.longest-substring-without-repeating-characters.py @@ -0,0 +1,56 @@ +""" +3. Longest Substring Without Repeating Characters +Difficulty: Medium +https://leetcode.com/problems/longest-substring-without-repeating-characters/ + +────────────────────────────────────────────────── + +Given a string s, find the length of the longest substring without +duplicate characters. + + + +Example 1: + +Input: s = "abcabcbb" +Output: 3 +Explanation: The answer is "abc", with the length of 3. Note that +"bca" and "cab" are also correct answers. + +Example 2: + +Input: s = "bbbbb" +Output: 1 +Explanation: The answer is "b", with the length of 1. + +Example 3: + +Input: s = "pwwkew" +Output: 3 +Explanation: The answer is "wke", with the length of 3. +Notice that the answer must be a substring, "pwke" is a subsequence +and not a substring. + + + +Constraints: + + • 0 <= s.length <= 10^5 + + • s consists of English letters, digits, symbols and spaces. +""" + + +class Solution: + def lengthOfLongestSubstring(self, s: str) -> int: + left = 0 + ans = 0 + seen = set() + for right, c in enumerate(s): + while c in seen: + seen.remove(s[left]) + left += 1 + seen.add(c) + ans = max(ans, right - left + 1) + + return ans