List<String> findWords(List<String> dict) {
        List<Integer> bitMap = new LinkedList<>();
        Collections.sort(dict, (s1, s2) -> s1.length() > s2.length() ? -1 : 1);
        for (String s : dict) {
            int tmp = 0;
            s = s.toLowerCase();
            for (int i = 0; i < s.length(); ++i) {
                tmp |= (1 << (s.charAt(i) - 'a'));
            }
            bitMap.add(tmp);
        }
        int max = 0;
        List<String> res = new LinkedList<>();
        for (int i = 0; i < bitMap.size(); ++i) {
            String op1 = dict.get(i);
            int tmp = bitMap.get(i);
            for (int j = i + 1; j < bitMap.size(); ++j) {
                if ((tmp & bitMap.get(j)) == 0) {
                    String op2 = dict.get(j);
                    if (op1.length() * op2.length() > max) {
                        max = op1.length() * op2.length();
                        res.clear();
                        res.add(op1);
                        res.add(op2);
                    }
                }
            }
        }
        return res;
    }