Find Longest Awesome Substring LeetCode solution in Java

1
class Solution {
2
public int longestAwesome(String s) {
3
Map<Integer, Integer> map = new HashMap<>();
4
map.put(0, -1);
5

6
int state = 0;
7
int ans = 0;
8
for (int i = 0; i < s.length(); i++) {
9
int bit = (1 << (s.charAt(i) - '0'));
10
state ^= bit; // if odd freq then it becomes even or if even becomes odd
11

12
if (map.containsKey(state)) ans = Math.max(ans, i - map.get(state));
13

14
for (int odd = 0; odd <= 9; odd++) { // become odds one by one
15
int mask = (1 << odd);
16

17
Integer j = map.get(state ^ mask);
18

19
if (j != null) ans = Math.max(ans, i - j);
20
}
21

22
if (!map.containsKey(state)) map.put(state, i);
23
}
24
return ans;
25
}
26
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0