要求:两个最长单词乘积且它们不能有相同字母
思路:是否相同字母用位运算相与来判断,要注意的是相同字母会在同一个单词出现所以不能加而是位或,优化空间是相同字母组成的不同单词只留下最长的
class Solution {
public:
int maxProduct(vector<string>& words) {
int n=words.size();
vector<int> v(n);
for(int i=0;i<n;++i){
for(char c:words[i]){
v[i]|=1<<(c-'a');
}
}
int ans=0;
for(int i=0;i<n;++i){
for(int j=i+1;j<n;++j){
if((v[i]&v[j])==0){
ans=max(ans,int(words[i].length()*words[j].length()));
}
}
}
return ans;
}
};