publicclassMaximumProductofWordLengths{ /** * Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the two words do not share common letters. * You may assume that each word will contain only lower case letters. * If no such two words exist, return 0. * * Example 1: * * Input: ["abcw","baz","foo","bar","xtfn","abcdef"] * Output: 16 * Explanation: The two words can be "abcw", "xtfn". * Example 2: * * Input: ["a","ab","abc","d","cd","bcd","abcd"] * Output: 4 * Explanation: The two words can be "ab", "cd". * Example 3: * * Input: ["a","aa","aaa","aaaa"] * Output: 0 * Explanation: No such pair of words. */ publicintmaxProduct(String[] words){ int[] masks = getMask(words); int max = 0; for (int i=1; i<words.length; i++){ for (int j=0; j<i; j++){ if ((masks[i] & masks[j]) == 0){ max = Math.max(max, words[i].length()+words[j].length()); } } } return max; }
public HashMap<Character, Integer> getBinaryMapping(){ HashMap<Character, Integer> mapping = new HashMap<>(); for (int i=0; i<26; i++){ mapping.put((char) ('a'+i), (1 << i)); } return mapping; }