您的位置:首页 > 其它

318. Maximum Product of Word Lengths

2016-04-23 11:19 369 查看

Problem

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.

Solution

在本题中,我们只需要关注有哪些字母,而不需要关心每个字母出现的次数。

一个int型整数有32位,但是小写字母一共只有26个,所以我们可以使用一个整数的低26位来表示一个字符串中都含有哪些字母。从低位到高位,如果该位是1,表示该字符串中有该字母,否则表示没有该子母。

注意运算符的优先级,==要比&高,所以注意加括号

class Solution {
public:
int maxProduct(vector<string>& words) {
if(words.empty())
return 0;
int ret = 0;
int len = words.size();
vector<int> wordsTable(len,0);
for(int i = 0;i<len;++i)
{
string tmp = words[i];
for(int j = 0;j<tmp.size();++j)
wordsTable[i] |= 1 << (tmp[j] - 'a');
}

for(int i = 0;i<len;++i)
for(int j = i+1;j<len;++j)
{
if((wordsTable[i]&wordsTable[j]) == 0&& (words[i].size()*words[j].size() > ret))
ret = words[i].size()*words[j].size();
}

return ret;
}

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