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