剑指 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;
    }
}

 

posted @ 2023-03-06 14:15  忧愁的chafry  阅读(11)  评论(0编辑  收藏  举报