Simple BitMasking, Smart BruteForce 75ms (Java)
Total possible subsequence n = 1 << string.length()-1\n\nFor each possible subsequence check if the string is palindrome or not.  If it\'s palindrome then store
Total possible subsequence n = 1 << string.length()-1\n\nFor each possible subsequence check if the string is palindrome or not.  If it\'s palindrome then store it in a list. \nNow Iterate through the each pair and check if this pair gives us the maximum result. \n\nBoth pair need to be disjoint to achieve it, we will store the binary representation of the subsequnce and use `&` to check if both palindrome has any same char index or not. \n\n\n\n\n\n    public int maxProduct(String s) {\n        char[] chars = s.toCharArray();\n        int n = 1 << chars.length;\n        List<int[]> list = new ArrayList<int[]>();\n\t\t// each number from 1 to n represent a unique subsequence \n        for (int i = 1; i < n; i++) {\n\t\t\t// get the string for current subsequence and check if it\'s palindrom\n            if (isPalindrom(getString(i, chars))) {\n\t\t\t\t// if it\'s palindrome then store the binary representation fo the sequence and number of 1\'s \n\t\t\t\t// as it will be required to calculate the product of the two subsequence\n                list.add(new int[]{i, countOnes(i)});\n            }\n        }\n\n        int max = 0;\n        for (int i = list.size() - 1; i >= 0; i--) {\n            int[] first = list.get(i);\n            int v = first[1];\n            for (int j = i - 1; j >= 0; j--) {\n\t\t\t\t// check if both subsequence has any common char index or not\n                if ((first[0] & list.get(j)[0]) == 0) {\n                    max = Math.max(max, v * list.get(j)[1]);\n                }\n            }\n        }\n\n        return max;\n    }\n\n    private String getString(int num, char[] chars) {\n        StringBuilder sb = new StringBuilder();\n        for (int i = 0; i < chars.length; i++) {\n            if ((num & (1 << i)) != 0) {\n                sb.append(chars[i]);\n            }\n        }\n        return sb.toString();\n    }\n\n    private boolean isPalindrom(String s) {\n        int i = 0, j = s.length() - 1;\n        while (i < j) {\n            if (s.charAt(i++) != s.charAt(j--)) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    private int countOnes(int v) {\n        int i = 0;\n        while (v != 0) {\n            i++;\n            v &= v - 1;\n        }\n        return i;\n    }
['Bitmask', 'Java']