您的位置:首页 > 其它

leetcode@ [318] Maximum Product of Word Lengths (Bit Manipulations)

2016-02-20 05:17 399 查看
https://leetcode.com/problems/maximum-product-of-word-lengths/

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.

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 res = 0;
for(int i=0; i<n; ++i) {
for(int j=i+1; j<n; ++j) {
int len1 = words[i].length(), len2 = words[j].length();
if((bits[i] & bits[j]) == 0) {
res = max(res, len1 * len2);
}
}
}

return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: