Find Longest Awesome Substring LeetCode solution in Python

1
class Solution:
2
def longestAwesome(self, s: str) -> int:
3
# li = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
4
li = [2**i for i in range(10)]
5
# checker = {0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512}
6
checker = set(li)
7
checker.add(0)
8
# di: k = prefix xor, v = the first idx I got a new prefix_xor_value.
9
di = collections.OrderedDict({0: -1})
10
maxLength = prefix_xor = 0
11

12
for i in range(len(s)):
13
prefix_xor ^= li[int(s[i])]
14
# Found a new prefix_xor_value
15
if prefix_xor not in di:
16
di[prefix_xor] = i
17

18
# XOR operation with previous prefix_xor_value
19
for key in di.keys():
20
if i - di[key] <= maxLength:
21
break
22
# s[di[key] : i] is Awesome Substring
23
if key ^ prefix_xor in checker:
24
maxLength = i - di[key]
25
return maxLength

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0