原题链接:Leetcode 318. 最大单词长度乘积
自己写的代码 哈希:
class Solution {
public:
int maxProduct(vector& words) {
int n=words.size();
int res=0;
vector> v(n,vector(26));
for(int i=0;i
for(int j=0;j
int tmp=words[i][j]-'a';
v[i][tmp]=1;
}
}
for(int i=0;i
for(int j=i+1;j
int f=1;
for(int k=0;k
int tmp=words[i][k]-'a';
if(v[j][tmp]==1) { f=0; break;}
}
if(f)
{
int len=words[i].size()*words[j].size();
res=max(res,len);
}
}
}
return res;
}
};
位运算:
class Solution {
public:
int maxProduct(vector& words) {
int n=words.size(), res=0;
vector v(n);
for(int i=0;i
for(int j=0;j
int tmp=words[i][j]-'a';
v[i]|=(1<
for(int j=i+1;j
if((v[i]&v[j])==0)//位运算要注意优先级,最好是打括号
{
res=max(res,int(words[i].size()*words[j].size()));
}
}
}
return res;
}
};
位运算优化:
class Solution {
public:
int maxProduct(vector& words) {
int n=words.size(), res=0;
unordered_map mp;
for(int i=0;i
int num=0,len=words[i].size();
for(int j=0;j
int tmp=words[i][j]-'a';
num|=(1<
int num1=it1.first,len1=it1.second;
for(auto it2:mp)
{
int num2=it2.first,len2=it2.second;
if((num1&num2)==0) res=max(res,len1*len2);
}
}
return res;
}
};



