题目链接: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;
    }
};
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。