LC318-最大单词长度乘积

318. 最大单词长度乘积

  • 关键:快速判断两个字符串是否有相同字母
  • 解决:预处理出每个单词的二进制数字表示,二进制表示一共有 26 位,如果该单词含有字母 a,则第 0 位为 1,依次类推。
  • 暴力枚举单词对,如果两个单词的按位与(&) 为 0,则这两个单词可以被选择,求长度的乘积和最大值作比较即可。
class Solution {
public:
    int maxProduct(vector<string>& words) {
        int n = words.size(), res = 0;
        vector<int>t(n, 0);
        for(int i = 0; i < n; ++i)
            for(auto &c : words[i])
                t[i] |= 1 << (c - 'a');
        for(int i = 0; i < n; ++i)
            for(int j = 0; j < i; ++j)
                if(!(t[i] & t[j])) res = max(res, (int)words[i].size() * (int)words[j].size());
        return res;
    }
};
posted @ 2021-11-17 14:34  Ivessas  阅读(39)  评论(0)    收藏  举报