给你一个字符串数组 words ,找出并返回 length(words[i]) * length(words[j]) 的最大值,并且这两个单词不含有公共字母。如果不存在这样的两个单词,返回 0 。力扣原文
示例 1:
输入: words = ["abcw","baz","foo","bar","xtfn","abcdef"]
输出: 16
解释 : 这两个单词为 "abcw", "xtfn"。
示例 2:
输入: words = ["a","ab","abc","d","cd","bcd","abcd"]
输出: 4
解释 : 这两个单词为 "ab", "cd"。
示例 3:
输入: words = ["a","aa","aaa","aaaa"]
输出: 0
解释 : 不存在这样的两个单词。
解题:
const aCharCodeAt = "a".charCodeAt(0);
var maxProduct = function (words) {
var getCharCodeAt = function (char) {
return char.charCodeAt(0) - aCharCodeAt;
};
let masks = [],
lens = [],
n = words.length;
for (let i = 0; i < n; i++) {
let mask = 0;
let len = words[i].length;
lens.push(len);
for (let j = 0; j < len; j++) {
mask |= 1 << getCharCodeAt(words[i][j]);
}
masks.push(mask);
}
var max=0;
for (let i = 0; i < n; i++) {
const mask = masks[i];
for (let j = i+1; j < n; j++) {
if((mask&masks[j])==0){
max=Math.max(max,lens[i]*lens[j])
}
}
}
return max
};