码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] 318. Maximum Product of Word Lengths

时间:2019-10-17 00:56:48      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:思路   ber   http   problems   空间   div   return   var   -o   

题意是在一个装着单词的数组里面,找出两个互相之间没有重复字母的单词(某一个单词自身可以有重复字母,比如foo, test)比如A和B好了,算出A.length() * B.length()的最大值。

思路是用bitmap。可以参考这个帖子,https://leetcode.com/problems/maximum-product-of-word-lengths/discuss/215611/Bit-solution-full-explanation-(javascript)-80-ms

用bitmap的方式非常巧妙,代码如下,11行用 |= 找出每个单词里面每个字母都出现过几次。18行当两个单词相与的时候,如果结果为0,可以判断出两个单词没有互相重复的字母。bitmap的最大好处在于可以迅速判断出比如单词里面每个字母是否出现过这样的问题。

时间O(n) - n是单词个数

空间O(1) - 只有一个32位的数组

 1 /**
 2  * @param {string[]} words
 3  * @return {number}
 4  */
 5 var maxProduct = function(words) {
 6     var max = 0;
 7     var holder = new Array(words.length).fill(0);
 8 
 9     for (var i = 0; i < words.length; i++) {
10         for (var j = 0; j < words[i].length; j++) {
11             holder[i] |= 1 << (words[i].charCodeAt(j) - 97);
12         }
13     }
14 
15     var len = words.length - 1;
16     for (var i = 0; i < len; i++) {
17         for (var j = i + 1; j <= len; j++) {
18             if ((holder[i] & holder[j]) === 0) {
19                 max = Math.max(max, words[i].length * words[j].length);
20             }
21         }
22     }
23 
24     return max;
25 };

 

[LeetCode] 318. Maximum Product of Word Lengths

标签:思路   ber   http   problems   空间   div   return   var   -o   

原文地址:https://www.cnblogs.com/aaronliu1991/p/11689437.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!