题目描述:
Given a string array words
, find the maximum value of length(word[i]) * length(word[j])
where the two words do not share common letters. You may assume that each word will contain only lower case letters. If no such two words exist, return 0.
Example 1:
Input: ["abcw","baz","foo","bar","xtfn","abcdef"]
Output: 16
Explanation: The two words can be "abcw", "xtfn"
Example 2:
Input: ["a","ab","abc","d","cd","bcd","abcd"]
Output: 4
Explanation: The two words can be "ab", "cd".
Example 3:
Input: ["a","aa","aaa","aaaa"]
Output: 0
Explanation: No such pair of words.
对于任意一对不含相同字母的单词,求它们的单词长度乘积的最大值。这道题如果用哈希表来统计每个单词中26个字母的出现情况,空间复杂度较高,而且如果需要判断任意两个单词是否含有相同字母也比较麻烦,考虑到int类型有32位,用较低的26位来存储每个单词的26个字母的出现情况正好合适,而且只需要与操作就能判断两个单词中是否含有相同字母,非常简便。
class Solution {
public:
int maxProduct(vector<string>& words) {
int n=words.size();
vector<int> code(n,0);
int result=0;
for(int i=0;i<n;i++) code[i]=encode(words[i]);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i!=j&&(code[i]&code[j])==0)
{
int mul=words[i].size()*words[j].size();
result=max(result,mul);
}
}
}
return result;
}
int encode(string s)
{
int result=0;
for(int i=0;i<s.size();i++) result|=1<<(s[i]-'a');
return result;
}
};