使用位运算存储每个字符串,这样可以在O(n)时间内预处理完所有字符串,接着O(n^2)时间复杂度内两重循环来两两比较,如果两个串相与为0,说明位上没有同时为1的情况,即没有相同字母。
C++代码
class Solution {
public:
int bitset(string str){
int res = 0;
for(int i=0;i<str.length();i++){
res |= 1<<(str[i]-'a');
}
return res;
}
int maxProduct(vector<string>& words) {
int res = 0;
int n = words.size();
vector<int>bits(n);
for(int i=0;i<n;i++){
bits[i] = bitset(words[i]);
}
for(int i=0;i<n;i++){
cout<<bits[i]<<endl;
for(int j=i+1;j<n;j++){
if( (bits[i] & bits[j]) == 0 ){
res = max(res,int(words[i].length()*words[j].length()));
}
}
}
return res;
}
};