> 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'
Created
April 11, 2022 20:23
-
-
Save bityob/6b235dc05bcd842821b7a3450870a351 to your computer and use it in GitHub Desktop.
get_longest_substring_of_two_chars.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment