您的位置:首页 > 其它

【leetcode题解】【M】【10】318. Maximum Product of Word Lengths

2015-12-23 01:28 441 查看
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.

Credits:

Special thanks to @dietpepsi for adding this problem and creating all test cases.

Subscribe to see which companies asked this question

最开始用 集合做,不过太慢了

然后看到可以用位操作,把每个字符串,转成一个26位的 bit串,关键是 用 | 来
然后对每个bit串,互相之间进行取 & 操作,如果为0,则说明没有重复的字母

class Solution(object):
def maxProduct(self, words):
#bit = [0]
maxx = 0

bit = [0] * len(words)

for i in xrange(len(words)):
for j in words[i]:
bit[i] |= 1 << (ord(j) - ord('a'))
#print bit

for i in xrange(len(bit)):
for j in xrange(i+1,len(bit)):
#print i,j
if len(words[i])*len(words[j])< maxx:
continue
if bit[i] & bit[j] == 0:
maxx = max(maxx,len(words[i])*len(words[j]))
return maxx

'''
pay attention to those like 'aaa',when using set
it's too slow
for i in xrange(len(words)):
for j in xrange(i+1,len(words)):
a = set(words[i])
b = set(words[j])
s = set(words[i] + words[j])
if len(s) ==(len(a)+len(b)):
maxx = max(maxx,len(words[i])*len(words[j]))

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