Int类型数字4字节,32位。将字符a~z映射到低26位,那么显然,可以将一个words[i]根据所包含的字符映射到一个int数字上,若两个words[i],words[j]包含相同的字符,那么二者对应的int数的&操作必然不为0。
class Solution {
int bitMap(string a)
{
int ret = 0;
for(int i=0;i<a.size();++i)
{
ret |=(1<<(a[i]-'a'));
}
return ret;
}
public:
int maxProduct(vector<string>& words) {
if(words.empty()) return 0;
int ret = 0;
vector<int> bM(words.size());
for(int i=0;i<words.size();++i)
{
bM[i]=bitMap(words[i]);
}
for(int i=0;i<words.size()-1;++i)
{
for(int j=i+1;j<words.size();++j)
{
if((bM[i]&bM[j])==0)
{
int t = words[i].size()*words[j].size();
ret = max(ret,t);
}
}
}
return ret;
}
};