Maximum Product of Word Lengths

leetcode第318题,要求在一串字符串中找出没有重复字母的单词,并且其长度之积最大。

tag是位操作,一开始没明白什么意思,后来参考后发现,单词全部由小写字母组成,因此只有26种可能,因此可以设置一个26位的数字来记录该位上字母是否出现,两个单词如果有相同的字母,那么这两个单词对应的代表的数字当按位与操作之后一定不是零。这样就可以就可以判断是否有重复字母了,然后遍历找出最大长度积就可以了,复杂度为o(n2)

class Solution(object):
    def maxProduct(self, words):
        """
        :type words: List[str]
        :rtype: int
        """
        nums = []
        n = len(words)
        maxlen = 0
        for word in words:
            nums.append(sum(1<<(ord(char)-ord('a')) for char in set(word)))
        for i in range(n):
            for j in range(n):
                if not (nums[i] & nums[j]):
                    maxlen = max(len(words[i])*len(words[j]),maxlen)
        return maxlen
        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值