剑指 Offer II 005. 单词长度的最大乘积(318. 最大单词长度乘积)
题目:
思路:
【1】貌似双循环是避不开,所以考虑的就是怎么进行快速比对,最优的就是在固定条件下用最少的空间辅助比对。
代码展示:
//时间10 ms击败91.21% //内存42.2 MB击败94.62% class Solution { public int maxProduct(String[] words) { int[] masks = new int[words.length]; //由于只是小写字母,最多26个,采用int32位的进制位记录 for (int i = 0; i < words.length; i++) { for (int j = 0; j < words[i].length(); j++) { //由于会存在重复的字符,会造成进位,所以这里采用或的方式,如果存在了就不变,保证每个字符都只占一次位 masks[i] |= 1 << (words[i].charAt(j) - 'a'); } } int maxProd = 0; //采用双循环的方式比对 for (int i = 0; i < words.length; i++) { for (int j = i + 1; j < words.length; j++) { if ((masks[i] & masks[j]) == 0) { maxProd = Math.max(maxProd, words[i].length() * words[j].length()); } } } return maxProd; } }