您的位置:首页 > 其它

leetcode 318: Maximum Product of Word Lengths

2016-08-16 20:51 351 查看
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.

题意:求,不包含相同字符的两个string的最大长度积;

思路:

如何降低判断两string是否包含相同字符的开销???

用bit来表示string元素中a-z每个字符是否出现;

class Solution {
public:
int maxProduct(vector<string>& words) {
int len = words.size();
if(len==0)
return 0;
vector<int> v(len,0);
vector<int> l(len,0);
for(int i=0;i<len;i++)
{
string tstr = words[i];
int tlen = tstr.length();
l[i] = tlen;
for(int j=0;j<tlen;j++)
{
int ttmp = 1<<(tstr[j]-'a');
v[i] |= ttmp;
}
}

int ans = 0;
for(int i=0;i<len;i++)
{
for(int j=i+1;j<len;j++)
{
int t2 = v[i]&v[j];
if(t2!=0)
continue;
int tmp = l[i]*l[j];
if(tmp>ans)
ans = tmp;
}
}
return ans;
}
};


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