题目链接: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;
}
};