Leetcode刷题Python318. 最大单词长度乘积

Posted Better Bench

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode刷题Python318. 最大单词长度乘积相关的知识,希望对你有一定的参考价值。

1 题目

给你一个字符串数组 words ,找出并返回 length(words[i]) * length(words[j]) 的最大值,并且这两个单词不含有公共字母。如果不存在这样的两个单词,返回 0 。

示例 1:

输入:words = [“abcw”,“baz”,“foo”,“bar”,“xtfn”,“abcdef”]
输出:16
解释:这两个单词为 “abcw”, “xtfn”。

示例 2:

输入:words = [“a”,“ab”,“abc”,“d”,“cd”,“bcd”,“abcd”]
输出:4
解释:这两个单词为 “ab”, “cd”。

2 解析

用一个数字来代指某个包含字母的字符串:低 26 方法来代指字母 a-z 是否出现过。具体的使用是将每个字母转为比特,然后将整个字符串的所有字母比特进行与运算,得到一个唯一的数字来表示当前字符串。

判断两个字符串的字母是否有相同的字母,进行与运算,如果等于0,说明无相同的字母。此时再判断两个字符串的长度相乘的结果,选出最大的即可。

时间复杂度 O ( n 2 ) O(n^2) O(n2)

3 Python实现

class Solution:
    def maxProduct(self, words: List[str]) -> int:
        masks = []
        for word in words:
            t = 0
            for w in word:
                u = 1 << (ord(w) - ord('a'))
                t |= u
            masks.append(t)

        ans = 0
        for i in range(len(words)):
            for j in range(i):
                if (masks[i] & masks[j]) == 0:
                    ans = max(ans, len(words[i]) * len(words[j]))
        return ans

以上是关于Leetcode刷题Python318. 最大单词长度乘积的主要内容,如果未能解决你的问题,请参考以下文章

leetcode中等318最大单词长度乘积

leetcode中等318最大单词长度乘积

LeetCode 391. 完美矩形(扫描线) / 318. 最大单词长度乘积 / 563. 二叉树的坡度

[LeetCode] 318. Maximum Product of Word Lengths

C++题解-Leecode 318. 最大单词长度乘积——Leecode每日一题系列

318. 最大单词长度乘积. 位运算