英文字母 26 位,而一个 int 数值占 32 位,所以可以考虑用一个 int 数值保存一个单词中英文字母出现的情况。
例如单词中出现字母 a,则数值中的第 0 位置 1。
将单词进行位掩码表示,每个单词对应一个位掩码。
如此要判断两个字符串是否包含相同字符,只需要判断对应的位掩码做与运算的结果是否为0即可。
代码实现:
classSolution{public:intmaxProduct(vector<string>& words){int m = words.size();
vector<int>nums(m);for(int i =0; i < m;++i){for(char c : words[i])
nums[i]|=(1<<(c -'a'));}int ans =0;for(int i =0; i < m-1;++i)for(int j = i +1; j < m;++j){if((nums[i]& nums[j])==0)
ans =max(ans,int(words[i].size()* words[j].size()));}return ans;}};