Given a string `s`

, find the length of the **longest substring** without repeating characters.

**Example 1:**

Input:s = "abcabcbb"Output:3Explanation:The answer is "abc", with the length of 3.

**Example 2:**

Input:s = "bbbbb"Output:1Explanation:The answer is "b", with the length of 1.

**Example 3:**

Input:s = "pwwkew"Output:3Explanation: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.

**Example 4:**

Input:s = ""Output:0

**Constraints:**

`0 <= s.length <= 5 * 10`

^{4}`s`

consists of English letters, digits, symbols and spaces.

class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
slow = 0
fast = 0
max_len = 0
if len(s) <2:
return len(s)
dic = {}
for k, t in enumerate(s):
if t not in dic or slow > dic[t]:
dic[t] = k
fast += 1
max_len = max(max_len, fast-slow)
else:
slow = dic[t] + 1
dic[t] = k
fast +=1
max_len = max(max_len, fast-slow)
return max_len

The basic idea of solving this problem is to keep track of all the characters we have already visited and maintain a window size in which each character appeared only once. So throughout the traversal whenever the window size is maximum, that will give us the result.

Time Complexity: O(n) // For traversing all the items in the array.

Space Complexity: O(n) // for keeping track of already visited items in the window, in the worst case all items will be present in the HashSet.