Skip to content

Instantly share code, notes, and snippets.

@bityob
Created April 11, 2022 20:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bityob/6b235dc05bcd842821b7a3450870a351 to your computer and use it in GitHub Desktop.
Save bityob/6b235dc05bcd842821b7a3450870a351 to your computer and use it in GitHub Desktop.
get_longest_substring_of_two_chars.py
def get_longest_substring_of_two_chars(string):
max_start = 0
max_end = 0
curr_start = 0
curr_second_char = 0
curr_end = 0
curr_chars = []
for index, ch in enumerate(string):
print(f"index={index}, ch={ch}, curr_start={curr_start}, curr_second_char={curr_second_char}, curr_end={curr_end}, curr_chars={curr_chars}, max_start={max_start}, max_end={max_end}")
if ch in curr_chars:
curr_end = index
continue
if len(curr_chars) < 2:
curr_chars.append(ch)
curr_end = index
curr_second_char = index
continue
curr_substring_len = curr_end - curr_start
if (curr_end - curr_start) > (max_end - max_start):
max_start, max_end = curr_start, curr_end
# Add new char and remove the first one
curr_chars.append(ch)
del curr_chars[0]
curr_start = curr_second_char
curr_end = index
curr_second_char = index
if (curr_end - curr_start) > (max_end - max_start):
max_start, max_end = curr_start, curr_end
return string[max_start:max_end+1]
> get_longest_substring_of_two_chars("aaabbbccccdcccccc")
index=0, ch=a, curr_start=0, curr_second_char=0, curr_end=0, curr_chars=[], max_start=0, max_end=0
index=1, ch=a, curr_start=0, curr_second_char=0, curr_end=0, curr_chars=['a'], max_start=0, max_end=0
index=2, ch=a, curr_start=0, curr_second_char=0, curr_end=1, curr_chars=['a'], max_start=0, max_end=0
index=3, ch=b, curr_start=0, curr_second_char=0, curr_end=2, curr_chars=['a'], max_start=0, max_end=0
index=4, ch=b, curr_start=0, curr_second_char=3, curr_end=3, curr_chars=['a', 'b'], max_start=0, max_end=0
index=5, ch=b, curr_start=0, curr_second_char=3, curr_end=4, curr_chars=['a', 'b'], max_start=0, max_end=0
index=6, ch=c, curr_start=0, curr_second_char=3, curr_end=5, curr_chars=['a', 'b'], max_start=0, max_end=0
index=7, ch=c, curr_start=3, curr_second_char=6, curr_end=6, curr_chars=['b', 'c'], max_start=0, max_end=5
index=8, ch=c, curr_start=3, curr_second_char=6, curr_end=7, curr_chars=['b', 'c'], max_start=0, max_end=5
index=9, ch=c, curr_start=3, curr_second_char=6, curr_end=8, curr_chars=['b', 'c'], max_start=0, max_end=5
index=10, ch=d, curr_start=3, curr_second_char=6, curr_end=9, curr_chars=['b', 'c'], max_start=0, max_end=5
index=11, ch=c, curr_start=6, curr_second_char=10, curr_end=10, curr_chars=['c', 'd'], max_start=3, max_end=9
index=12, ch=c, curr_start=6, curr_second_char=10, curr_end=11, curr_chars=['c', 'd'], max_start=3, max_end=9
index=13, ch=c, curr_start=6, curr_second_char=10, curr_end=12, curr_chars=['c', 'd'], max_start=3, max_end=9
index=14, ch=c, curr_start=6, curr_second_char=10, curr_end=13, curr_chars=['c', 'd'], max_start=3, max_end=9
index=15, ch=c, curr_start=6, curr_second_char=10, curr_end=14, curr_chars=['c', 'd'], max_start=3, max_end=9
index=16, ch=c, curr_start=6, curr_second_char=10, curr_end=15, curr_chars=['c', 'd'], max_start=3, max_end=9
'ccccdcccccc'

> get_longest_substring_of_two_chars("aaabbcabaabbbabadcabab")
index=0, ch=a, curr_start=0, curr_second_char=0, curr_end=0, curr_chars=[], max_start=0, max_end=0
index=1, ch=a, curr_start=0, curr_second_char=0, curr_end=0, curr_chars=['a'], max_start=0, max_end=0
index=2, ch=a, curr_start=0, curr_second_char=0, curr_end=1, curr_chars=['a'], max_start=0, max_end=0
index=3, ch=b, curr_start=0, curr_second_char=0, curr_end=2, curr_chars=['a'], max_start=0, max_end=0
index=4, ch=b, curr_start=0, curr_second_char=3, curr_end=3, curr_chars=['a', 'b'], max_start=0, max_end=0
index=5, ch=c, curr_start=0, curr_second_char=3, curr_end=4, curr_chars=['a', 'b'], max_start=0, max_end=0
index=6, ch=a, curr_start=3, curr_second_char=5, curr_end=5, curr_chars=['b', 'c'], max_start=0, max_end=4
index=7, ch=b, curr_start=5, curr_second_char=6, curr_end=6, curr_chars=['c', 'a'], max_start=0, max_end=4
index=8, ch=a, curr_start=6, curr_second_char=7, curr_end=7, curr_chars=['a', 'b'], max_start=0, max_end=4
index=9, ch=a, curr_start=6, curr_second_char=7, curr_end=8, curr_chars=['a', 'b'], max_start=0, max_end=4
index=10, ch=b, curr_start=6, curr_second_char=7, curr_end=9, curr_chars=['a', 'b'], max_start=0, max_end=4
index=11, ch=b, curr_start=6, curr_second_char=7, curr_end=10, curr_chars=['a', 'b'], max_start=0, max_end=4
index=12, ch=b, curr_start=6, curr_second_char=7, curr_end=11, curr_chars=['a', 'b'], max_start=0, max_end=4
index=13, ch=a, curr_start=6, curr_second_char=7, curr_end=12, curr_chars=['a', 'b'], max_start=0, max_end=4
index=14, ch=b, curr_start=6, curr_second_char=7, curr_end=13, curr_chars=['a', 'b'], max_start=0, max_end=4
index=15, ch=a, curr_start=6, curr_second_char=7, curr_end=14, curr_chars=['a', 'b'], max_start=0, max_end=4
index=16, ch=d, curr_start=6, curr_second_char=7, curr_end=15, curr_chars=['a', 'b'], max_start=0, max_end=4
index=17, ch=c, curr_start=7, curr_second_char=16, curr_end=16, curr_chars=['b', 'd'], max_start=6, max_end=15
index=18, ch=a, curr_start=16, curr_second_char=17, curr_end=17, curr_chars=['d', 'c'], max_start=6, max_end=15
index=19, ch=b, curr_start=17, curr_second_char=18, curr_end=18, curr_chars=['c', 'a'], max_start=6, max_end=15
index=20, ch=a, curr_start=18, curr_second_char=19, curr_end=19, curr_chars=['a', 'b'], max_start=6, max_end=15
index=21, ch=b, curr_start=18, curr_second_char=19, curr_end=20, curr_chars=['a', 'b'], max_start=6, max_end=15
'abaabbbaba'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment