[路飞]leetcode-318.最大单词长度乘积

95 阅读1分钟

给你一个字符串数组 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
};