前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode 318. Maximum Product of Word Lengths

Leetcode 318. Maximum Product of Word Lengths

作者头像
Tyan
发布2021-07-01 10:30:49
2210
发布2021-07-01 10:30:49
举报
文章被收录于专栏:SnailTyan

文章作者:Tyan 博客:noahsnail.com | CSDN | 简书

1. Description

Maximum Product of Word Lengths
Maximum Product of Word Lengths

2. Solution

解析: Version 1每次迭代都需要进行两次set转换,Version 2预先进行了set转换,效率有提升。由于Version 2中两个字符串的与运算非常耗时,因此Version 3先将字符串转换为代表字符串的数字,然后进行与运算,这样两个字符串的与运算就变成了两个数字按位进行与运算,大大减少了运行时间。Version 4将代表数字一样的字符串进行了合并,并保留了最大的字符串长度,这样减少了与运算的迭代次数,并且不影响最终结果。

  • Version 1
代码语言:javascript
复制
class Solution:
    def maxProduct(self, words: List[str]) -> int:
        words.sort(key=len, reverse=True)
        maximum = 0
        n = len(words)
        for i in range(n):
            for j in range(i+1, n):
                x = len(words[i])
                y = len(words[j])
                if maximum >= x * y:
                    return maximum
                intersection = set(words[i]) & set(words[j])
                if len(intersection) == 0:
                    maximum = max(maximum, x * y)
                    break
        return maximum
  • Version 2
代码语言:javascript
复制
class Solution:
    def maxProduct(self, words: List[str]) -> int:
        chars = [set(word) for word in words]
        maximum = 0
        n = len(words)
        for i in range(n):
            for j in range(i+1, n):
                x = len(words[i])
                y = len(words[j])
                intersection = chars[i] & chars[j]
                if len(intersection) == 0:
                    maximum = max(maximum, x * y)
        return maximum
  • Version 3
代码语言:javascript
复制
class Solution:
    def maxProduct(self, words: List[str]) -> int:
        lengths = [len(word) for word in words]
        flags = []
        for word in words:
            flag = 0
            for ch in word:
                flag = flag | (1 << (ord(ch) - 97))
            flags.append(flag)
        maximum = 0
        n = len(words)
        for i in range(n):
            for j in range(i+1, n):
                if flags[i] & flags[j] == 0:
                    maximum = max(maximum, lengths[i] * lengths[j])
        return maximum
  • Version 4
代码语言:javascript
复制
class Solution:
    def maxProduct(self, words: List[str]) -> int:
        maximum = 0
        mapping = {}
        for word in words:
            flag = 0
            for ch in word:
                flag = flag | (1 << (ord(ch) - 97))
            mapping[flag] = max(mapping.get(flag, 0), len(word))

        for key1, value1 in mapping.items():
            for key2, value2 in mapping.items():
                if key1 & key2 == 0:
                    maximum = max(maximum, value1 * value2)
        return maximum

Reference

  1. https://leetcode.com/problems/maximum-product-of-word-lengths/
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/06/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Description
  • 2. Solution
  • Reference
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档