Find Longest Awesome Substring

Given a string s. An awesome substring is a non-empty substring of s such that we can make any number of swaps in order to make it palindrome.

Return the length of the maximum length awesome substring of s.

 

Example 1:

Input: s = "3242415"
Output: 5
Explanation: "24241" is the longest awesome substring, we can form the palindrome "24142" with some swaps.

Example 2:

Input: s = "12345678"
Output: 1

Example 3:

Input: s = "213123"
Output: 6
Explanation: "213123" is the longest awesome substring, we can form the palindrome "231132" with some swaps.

Example 4:

Input: s = "00"
Output: 2

 

Constraints:


Solution:

class Solution {
    public int longestAwesome(String s) {
        int n = s.length();
        Map<Integer, Integer> map = new HashMap();
        map.put(0, -1);
        int mask = 0, max = 1;
        for (int i = 0; i < n; i ++) {
            mask ^= (1 << s.charAt(i) - '0');
            for (int j = 0; j <= 10; j ++) {
                int target = j == 10 ? mask : mask ^ (1 << j);
                if (map.containsKey(target)) {
                    max = Math.max(max, i - map.get(target));
                }
            }
            map.putIfAbsent(mask, i);
        }
        
        return max;
    }
}