3. Longest Substring Without Repeating Characters

Medium


Given a string s, find the length of the longest substring without repeating characters.

 

Example 1:

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

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 <= 5 * 104
  • s consists of English letters, digits, symbols and spaces.




 class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        max_length = 0
        #hashset = set()
        wordlist = []

        for c in s:
            if c in wordlist:

                removed_char = wordlist.pop(0)
                #hashset.remove(removed_char)
                while(removed_char!=c):
                    removed_char = wordlist.pop(0)
                    #hashset.remove(removed_char)

                #hashset.add(c)
                wordlist.append(c)

            else:
                #hashset.add(c)
                wordlist.append(c)

                max_length = max(len(wordlist), max_length)

        return max_length

Random Note


From python 3.7 dict guarantees that order will be kept as they inserted, and popitem will use LIFO order but we need FIFO type system. so we need OrderedDict which have popIten(last = T/F) for this req. One thing, next(iter(dict)) will return the first key of the dict