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:
Given ["abcw", "baz", "foo", "bar", "xtfn", "abcdef"]
Return 16
The two words can be "abcw", "xtfn"
.
Example 2:
Given ["a", "ab", "abc", "d", "cd", "bcd", "abcd"]
Return 4
The two words can be "ab", "cd"
.
Example 3:
Given ["a", "aa", "aaa", "aaaa"]
Return 0
No such pair of words.
难点是怎么判断两个字符串是否不含有相同的字符。
用一个int,32位;而小写字母只有26个,后26位用来表示对应的字符是否存在。
最后两个int相与,如果结果为0,说明两个对应的字符串没有相同的字符!
class Solution {
public:
int maxProduct(vector<string>& words) {
vector<int> mask(words.size(), 0);
int maxPro = 0;
for (int i = 0; i < words.size(); i++){
int len = words[i].size();
for (char c:words[i]){
mask[i] |= (1 << (c - 'a'));
}
for (int j = 0; j < i; j++){
if ((mask[i] & mask[j]) == 0){
int pro = words[i].size()*words[j].size();
if (pro > maxPro){
maxPro = pro;
}
}
}
}
return maxPro;
}
};