Number 3¶
https://leetcode.com/problems/longest-substring-without-repeating-characters/
[14]:
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
i1 = 0
s_list = list(s)
len_s = len(s_list)
max_string_size = 0
for i1 in range(len_s):
print(i1)
char_list = [] # check if character already in list
for i2 in range(i1, len_s):
cur_char = s_list[i2]
if cur_char not in char_list:
char_list.append(cur_char)
else:
# Time to recalculate
break
cur_string_size = len(char_list)
max_string_size = cur_string_size if cur_string_size > max_string_size else max_string_size
return max_string_size
[15]:
s = Solution()
s.lengthOfLongestSubstring("abhiram")
0
1
2
3
4
5
6
[15]:
6
Let’s see if this can be faster
Update - This actually threw a TLE on a really long input. Fail. ⛔️
[16]:
class Solution2:
def lengthOfLongestSubstring2(self, s: str) -> int:
i1 = 0
s_list = list(s)
len_s = len(s_list)
max_string_size = 0
for i1 in range(len_s):
for i2 in range(len_s, i1-1,-1):
cur_word = s_list[i1:i2]
len_set = len(set(cur_word))
len_list = len((cur_word))
if len_set < len_list:
pass
else:
cur_string_size = len(cur_word)
max_string_size = cur_string_size if cur_string_size > max_string_size else max_string_size
break
return max_string_size
[17]:
s = Solution2()
s.lengthOfLongestSubstring2("abhiram")
[17]:
6
Same double pointer trick, but this time start from the reverse
[18]:
class Solution3:
def lengthOfLongestSubstring3(self, s: str) -> int:
i1 = 0
s_list = list(s)
len_s = len(s_list)
max_string_size = 0
for i1 in range(len_s):
char_list = [] # check if character already in list
if max_string_size > len_s - i1:
break
for i2 in range(i1, len_s):
cur_char = s_list[i2]
if cur_char not in char_list:
char_list.append(cur_char)
else:
# Time to recalculate
break
cur_string_size = len(char_list)
max_string_size = cur_string_size if cur_string_size > max_string_size else max_string_size
return max_string_size
[19]:
s = Solution3()
s.lengthOfLongestSubstring3("abhiram")
[19]:
6
[20]:
class Solution4:
def lengthOfLongestSubstring4(self, s: str) -> int:
i1 = 0
s_list = list(s)
len_s = len(s_list)
max_string_size = 0
for i1 in range(len_s):
char_list = [] # check if character already in list
char_list2 = []
if max_string_size > len_s - i1:
return max_string_size
for i2 in range(i1, len_s):
cur_char = s_list[i2]
if cur_char not in char_list:
char_list.append(cur_char)
else:
# Time to recalculate
break
for i3 in range(i1+1, len_s):
cur_char = s_list[i3]
if cur_char not in char_list2:
char_list2.append(cur_char)
else:
# Time to recalculate
break
i1 = i1+1
cur_string_size = len(char_list)
cur_string_size2 = len(char_list2)
max_string_size = max(max_string_size,cur_string_size,cur_string_size2 )
return max_string_size
s = Solution4()
s.lengthOfLongestSubstring4("abhiram")
[20]:
6