Javascript with bit mask
Intuition\n Describe your first thoughts on how to solve this problem. \n\n# Approach\n Describe your approach to solving the problem. \n\n# Complexity\n- Time 
# Intuition\n<!-- Describe your first thoughts on how to solve this problem. -->\n\n# Approach\n<!-- Describe your approach to solving the problem. -->\n\n# Complexity\n- Time complexity:\n<!-- Add your time complexity here, e.g. $$O(n)$$ -->\n\n- Space complexity:\n<!-- Add your space complexity here, e.g. $$O(n)$$ -->\n\n# Code\n```\n/**\n * @param {string} s\n * @return {number}\n */\nvar maxProduct = function(s) {\n    const len = s.length\n    const m = {} // hashmap for palindrome, ex: { 1: 1, 2:1, ... , 128: 1, 130, 2 }\n\n    for (let mask=1;mask<(1<<len);mask++) { // iterate all cases \n        let subseq = "" // temporary palindrome subsequence string\n        for (let i=0;i<len;i++) { // iterate the total length of string\n            if (mask & (1 << i)) { // if true, found a character index for the mask\n                subseq += s[i] // append the character to the subsequence\n            }\n        }\n        if (subseq == [...subseq].reverse().join(\'\')) { // check whether or not subseq is palindrome string\n            m[mask] = subseq.length // if it\'s palindrome, add it to the hashmap\n        }\n    }\n    \n    let res = 0\n    // iterate nested loop to find the max product\n    for (const [m1,] of Object.entries(m)) { \n        for (const [m2,] of Object.entries(m)) {\n            if ((+m1 & +m2) == 0) { // found disjoint subseq\n               res = Math.max(res, m[m1] * m[m2])\n            }\n        }\n    }\n    return res\n};\n```
['JavaScript']