https://leetcode.cn/problems/aseY1I/
暴力
class Solution {
public:
bool st[1005][26];
int maxProduct(vector<string>& words) {
int len=words.size();
memset(st,0,sizeof st);
for(int i=0;i<len;i++)
{
for(int j=0;j<words[i].size();j++)
{
st[i][words[i][j]-'a']=true;
}
}
int ans=0;
for(int i=0;i<len;i++)
for(int j=i+1;j<len;j++)
{
bool f=false;
int len1=words[i].size(),len2=words[j].size();
for(int k=0;k<words[i].size();k++)
{
if(st[j][words[i][k]-'a'])
{
f=true;
break;
}
}
if(!f) ans=max(ans,len1*len2);
}
return ans;
}
};
位优化
class Solution {
public:
int maxProduct(vector<string>& words) {
int len=words.size();
vector<int>mask;
for(int i=0;i<len;i++)
{
int t=0;
for(int j=0;j<words[i].size();j++)
{
t|=(1<<(words[i][j]-'a'));
}
mask.push_back(t);
}
int ans=0;
for(int i=0;i<len;i++)
for(int j=i+1;j<len;j++)
{
int len1=words[i].size(),len2=words[j].size();
if(mask[i]&mask[j]) continue;
ans=max(ans,len1*len2);
}
return ans;
}
};