美文网首页
leetcode 318. Maximum Product of

leetcode 318. Maximum Product of

作者: Terence_F | 来源:发表于2016-07-17 09:48 被阅读16次

Maximum Product of Word Lengths
给定一个字符串数组vector<string> words, 求两个词的长度的最大乘积,这两个词必须不能包含同样的字母
很容易想到的就是比较两个词包含的字母,我们可以用一个32位(32位可以容纳26个字母)的数字记录一个单词包含的字母。对于两个词只需要对两个词对应的二进制mask做and运算,如果没有相同的字母,尝试更新result
对于每个词的mask,我们用一个int数组来存放

ab: 00...0000011
cdfg 0...1101100

class Solution {
public:
    int maxProduct(vector<string>& words) {
        vector<int> masks(words.size(), 0);
        int result = 0;
        for (int i = 0; i < words.size(); i++) {
            for (char c: words[i]) 
                masks[i] |= 1 << (c - 'a');
            for (int j = 0; j < i; j++) {
                if (!(bits[i] & masks[j]))
                    result = max(result, (int)(words[i].size() * words[j].size()));
            }
        }
        return result;
    }
};

相关文章

网友评论

      本文标题:leetcode 318. Maximum Product of

      本文链接:https://www.haomeiwen.com/subject/ekgujttx.html