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;
}
};