题目链接:318. 最大单词长度乘积 – 力扣(LeetCode) (leetcode-cn.com)

难度:Medium

每个单词的字母呈现的状况,可以用二进制位来保存,这样判别两个单词是否有公共字母,进行一次 &\& 运算即可。

对于位数比较低的状况判别,一般都能用二进制。

#define max(a,b) ( a>b?a:b )
class Solution {
public:
    int maxProduct(vector<string>& words) {
        int cnt[1005];
        int len = words.size();
        memset(cnt,0,sizeof(cnt));
        for(int i=0;i<len;i++){
            for(auto ch:words[i]){
                int num = 1<<(ch-'a');
                cnt[i] |= num;
            }
        }
        int ans = 0;
        for(int i=0;i<len;i++){
            for(int j=i+1;j<len;j++){
                if(!(cnt[i] & cnt[j])){
                    ans = max(words[i].size() * words[j].size(), ans);
                }
            }
        }
        return ans;
    }
};