318. 最大单词长度乘积
- 解析:首先可以改进字符串是否包含公共字母的比较,这里可以通过位运算优化,利用位运算为每个字符串生成state,有哪个字母,对应位就置为1,反之为0。在判断时,只需要对state做与运算即可,若为0则不包含重复字母。其次可以在比较次数上优化,这里我没想出来,官方是只保存具有相同state的字符串的length最大值,在此基础上应该还可以对state做筛选,不过会带来额外开销。
code:
class Solution {
public:
int maxProduct(vector& words) {
int n = words.size();
if(n <= 1)
return 0;
int result = 0;
// construct state;
unordered_map state_len;
for(int i=0;i(str.size()));
}else{
state_len[state] = str.size();
}
}
// brute-force
for(auto i=state_len.begin();i!=state_len.end();i++)
for(auto j=next(i,1);j!=state_len.end();j++){
int flag = (i->first) & (j->first);
if(flag!=0)
continue;
result = max(result, i->second *j->second);
}
return result;
}
};