您的位置:首页 > 其它

318. Maximum Product of Word Lengths

2016-04-19 10:16 387 查看
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型数表示,“abc”表示0000.....0000111,两个数相与,如果为0 ,认为两个字符串没有相同字母,否则是有相同字母的。故首先将

字符串转换。

class Solution {
public:
void strToBits(vector<int>& bits, vector<string>& words){
for(int i = 0; i< words.size();++i){
int tmp = 0;
for(int j =0; j < words[i].size(); ++j){
int offset = words[i][j] - 'a';
tmp = (tmp | (1 << offset));
}
bits[i] = tmp;
}
}
int maxProduct(vector<string>& words) {
int n  =words.size();
if(n<2) return 0;
vector<int> bits(n,0);

strToBits(bits, words);

int result = 0;
for(int i = 0; i < n; ++i){
for(int j = i+1; j < n; ++j){
int len1 = words[i].length();
int len2 = words[j].length();
if((bits[i] & bits[j]) == 0)
{
result = max(result, len1*len2);
}
}
}
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: