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

175 篇文章 0 订阅
157 篇文章 0 订阅

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]))

        '''


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值